分類: c/c++
1.afxbeginthread 與 cwinthread::createthread的區別:
2.常見的啟動執行緒函式有三個:
createthread(), _beginthread(以及_beginthreadex()),afxbeginthread()
1和2是sdk函式,3是mfc函式
至於啟動的是工作者執行緒還是ui執行緒,是由函式3的引數來決定的 ;
建立使用者介面執行緒的步驟:
使用classwizard建立類cwinthread的派生類(以cuithread類為例) class cuithread : public cwinthread
}afx_virtual
// implementation
protected:
virtual ~cuithread();
// generated message map functions
//}afx_msg
declare_message_map()
};過載函式initinstance()和exitinstance()。 bool cuithread::initinstance()
建立新的使用者介面執行緒 void cuithreaddlg::onbutton1()
請注意以下兩點:
a、在uithreaddlg.cpp的開頭加入語句: #include "uithread.h"
b、把uithread.h中類cuithread()的建構函式的特性由 protected 改為 public。
使用者介面執行緒的執行次序與應用程式主線程相同,首先呼叫使用者介面執行緒類的initinstance()函式,如果返回true,繼續呼叫執行緒的run()函式,該函式的作用是執行乙個標準的訊息迴圈,並且當收到wm_quit訊息後中斷,在訊息迴圈過程中,run()函式檢測到執行緒空閒時(沒有訊息),也將呼叫onidle()函式,最後run()函式返回,mfc呼叫exitinstance()函式清理資源。
你可以建立乙個沒有介面而有訊息迴圈的執行緒,例如:你可以從cwinthread派生乙個新類,在initinstance函式中完成某項任務並返回false,這表示僅執行initinstance函式中的任務而不執行訊息迴圈,你可以通過這種方法,完成乙個工作者執行緒的功能。
終止由CWinThread派生出來的執行緒
方法一 首先宣告乙個全域性變數 extern cwinthread pthread 在.h中 然後定義 cwinthread pthread null cpp中 在你的執行緒類的bool cmythread initinstance 裡加入 pthread afxgetthread 最後,在你要結束...
rails grape 的使用詳解
1 gem準備 gem grape 0.8.0 gem grape jbuilder 0.2.0 gem jbuilder 2.0 class api grape api version v1 using path format json formatter json,grape formatter...
android shape的使用詳解
shape的屬性大全 預設為rectangle 虛線間隔寬度 注意 一 1 android radius,半 徑,會被下邊的單個角度半徑屬性覆蓋,預設為1dp,2 在使用時,如果單獨設定四個角度,又大小不一致時,eclipse的graphics preview會報錯。但是直接真機執行即可。比如實在線...