本人對MFC不是很了解,因為大作業需要接觸MFC界面編程,并涉及多執行緒問題,希望有大牛可以多解釋一下,多謝!
我想實作的功能是:
1.利用OPENCV,通過攝像頭對人手勢進行實時跟蹤識別,包括石頭,剪刀和布三種手勢(單獨的手勢識別跟蹤程式無問題),其中,手勢識別程式主要執行機構是一個while回圈,大致代碼如下:
while(capture) //capture為攝像頭獲取信號,此處為實時跟蹤計算識別
{
手勢檢測識別....
}
此程式是獨占CPU的,只要一開始就會不斷在while回圈中執行;
2.利用隨機函式,隨機生成1,2,3三個數中的一個,以此代表電腦猜拳結果;與手勢識別程式沒有任何資料互動;
因為手勢識別程式有獨占特性,在回圈檢測程序中無法進行其他不相關的計算,所以我考慮到了多執行緒,之前在windows下面簡單的使用過handle以及CreateThread函式,但是在MFC下使用作業執行緒或用戶執行緒時(都嘗試了一下),都遇到了啟動手勢識別執行緒之后無法進行其他操作的問題,我想問一下難道MFC視窗的多執行緒不是真正意義上的多執行緒嗎?(我看到過有人說MFC視窗是單執行緒的,汗~~)。
我也想過其他許多打斷手勢檢測途徑,比如在電腦出拳執行緒中postmessage一個信號給手勢識別執行緒,但是遇到了啟動手勢識別執行緒就無法執行電腦出拳執行緒的問題;也考慮過額外設定一個手勢識別視窗,并設定一個on_clicked_button觸發器來取消手勢識別執行緒和視窗,但是嘗試之后并不能打斷while(capture)的執行,好頑強啊T.T,感覺我實作的好像并不是真正的多執行緒,還是單執行緒順序執行。
看了cbNotes這位大大的博文,收益頗多,但是里面所述的用戶執行緒,復制檔案實際也是單任務單執行緒,只涉及到復制檔案,新視窗只是更新顯示復制檔案的進度,所以懷疑MFC是否真的是多執行緒,cbNotes大大的博文地址:http://blog.csdn.net/cbnotes/article/details/8465212
哪位大大能幫我解決一下呢?或者提出一些新的解決方案,不甚感激!
uj5u.com熱心網友回復:
Multiple Threads in the User Interface http://msdn.microsoft.com/zh-cn/library/ms810439.aspxuj5u.com熱心網友回復:
你不去查資料不去網上搜索,一上來就發帖拿來主義,還對自己不知道的東西就是質疑它行不行,你覺得誰會回答你的問題?uj5u.com熱心網友回復:
執行緒 while 回圈中適當 Sleep, 以讓出CPU給其它執行緒uj5u.com熱心網友回復:
這個是上個世紀的太老了吧uj5u.com熱心網友回復:
1. 首先,不要在主執行緒(也就是UI執行緒)中做CPU密集型的計算,否則你的程式必須卡死!不卡死的話,比爾都回來拜你為師。2. 需要理解worker執行緒和UI執行緒的區別,以及worker執行緒如何更新UI執行緒,否則你的程式要么卡死,要么crash。
3. 演算法的重要性。在CPU密集型的計算中,演算法是很重要的,好的演算法和差的演算法有時會相差100%。
當然,這都是理論建議。你沒給出具體代碼,咱也不可能給出具體建議。
uj5u.com熱心網友回復:
姜是老的辣
uj5u.com熱心網友回復:
開個子執行緒,里面做運算,然后用訊息函式發出去,操縱UI界面顯示更新轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/109591.html
標籤:進程/線程/DLL
上一篇:Inno Setup如何關閉行程
