CWinThread的使用詳解

2021-06-18 21:51:28 字數 1147 閱讀 7328

分類: 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會報錯。但是直接真機執行即可。比如實在線...