我的程式大概分為兩部分:
1. 從設備上面采集資料。
2.將采集的資料進行處理,畫圖。
因為資料處理比較多比較麻煩,我的想法是采集資料單獨開個執行緒,然后處理資料開個執行緒。資料采集快速運行直到采完,資料處理可以慢慢來。
本人使用的是MFC,對多執行緒不太了解,但是又比較急,這種情況是不是開兩個作業執行緒。
如果有人有類似的例子就更好了,萬分感謝。
uj5u.com熱心網友回復:
多執行緒不難,例子網上有好多uj5u.com熱心網友回復:
你的想法可以,只不過采集執行緒跟處理執行緒之間需要交換資料,可以用佇列等來傳遞uj5u.com熱心網友回復:
這樣做肯定可以的,如果采集的資訊分好幾批的話就像版主說的那樣放到佇列中,關于佇列http://www.cnblogs.com/mfryf/archive/2012/08/09/2629992.html記得上鎖,其實假如你資料采集快的話,而且處理不著急,其實一個執行緒也可以
uj5u.com熱心網友回復:
A執行緒里去采集影像,然后A里面有需要處理的影像時,再開一個執行緒B,把影像傳入到B執行緒里去處理uj5u.com熱心網友回復:
通常來說,采集資料是需要一個執行緒的,而資料的處理要看實際情況,如果只是復雜但并不耗時的話,就沒有必要開執行緒,如果是很耗時,那就要開執行緒了。資料處理如果不耗時,則可以放在采集執行緒中來完成,也可以放入佇列然后在主執行緒中處理(也可以向主視窗發送訊息,在這個訊息中處理處理資料)
如果是很耗時,則用單獨的執行緒來處理,這個時候需要注意執行緒的同步問題,這是最需要注意的地方。
至于如何創建執行緒,最基本的是CreateThread(),去網上一搜一大把
uj5u.com熱心網友回復:
對的 我的資料處理很耗時,因為很多矩陣操作,所以我不想影響到我的采集資料速度,所以一般這種情況的話 都是用多執行緒來解決的,或者有沒有其他方法。
uj5u.com熱心網友回復:
既然耗時,那就用執行緒處理,執行緒的基本流程大致如下:bool bRuning;
DWORD threadEntry(LPVOID lpVoid)
{
while ( bRuning )
{
...;do yourself work here
Sleep(1);
}
return 0;
}
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
SECTURITY_ATTRIBUTE sa;
memset( &sa, 0, sizeof(sa) );
sa.nLength = sizeof(sa);
DWORD threadId;
bRuning = true;
HANDLE hThread = CreateThread(&sa, 0, (LPTHREAD_START_ROUTINE)theadEntry, (LPVOID)m_hWnd, &theadId);
return TRUE;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/123948.html
標籤:進程/線程/DLL
上一篇:windows 10 作業系統向系統除錯服務內輸入大量垃圾資訊,造成DbgView 顯示受到嚴重干擾, 微軟是不是不行了啊,這樣的產品都放出來,有沒有搞錯啊!!
