使用者介面執行緒AfxBeginThread的使用

2021-08-31 18:04:11 字數 1509 閱讀 5630

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

使用者介面執行緒在執行時會有乙個視窗介面和與其相對應的視窗函式,所以它可以通過響應訊息來和使用者進行互動。

afxbeginthread函式原型如下:

cwinthread *afxbeginthread( 

cruntimeclass *pthreadclass,         

//從cwinthread派生的runtime_class類 

int npriority 

/* = thread_priority_normal */,      

//指定執行緒的優先順序 

uint nstacksize 

/* = 0 */,                

//定義新執行緒的堆疊大小 

dword dwcreateflags 

/* = 0 */,     

//為控制線程建立的附加標誌 

lpsecurity_attributes lpsecurityattrs 

/* = null */    

//指定執行緒的安全屬性 

) 使用者介面執行緒必須包含有訊息迴圈,以便可以處理使用者訊息。要使用使用者介面執行緒,必須派生自cwinthread類乙個執行緒類,而且一般要重寫類的initinstance()和exitinstance()函式。

#include 

"mythread.h" 

4.在cmythread類實現檔案中包含標頭檔案:

#include 

"mywnd.h" 

5.在cmythread::initinstance()中建立執行緒中的窗體:

bool cmythread::initinstance() 

6.在cmywnd類中修改建構函式cmywnd()為public屬性,然後實現滑鼠左鍵訊息響應函式:

void cmywnd::onlbuttondown(uint nflags, cpoint point) 

7.在應用程式檢視類中實現滑鼠左鍵響應函式:

void cthreadtestview::onlbuttondown(uint nflags, cpoint point) 

程式執行結果:

這裡要注意的是,這個使用者介面不是屬於主框架視窗的,可以說是和主線程視窗並列的。通過檢視桌面工作列就可以發現,兩個視窗並行著顯示,而且互相不影響。注意上面給出的**messagebox是引用api的,並且是無視窗,所以這裡有三個並行的視窗,而且各不干擾。單獨關閉使用者介面執行緒的窗體,可以正常退出使用者介面執行緒。但是如果直接關閉了主線程窗體,那麼使用者介面執行緒就會非法關閉,造成記憶體洩露。

對於使用者介面執行緒的正常退出,只要在使用者介面執行緒內呼叫postquitmessage即可,引數為0的話,代表成功完成。

給我老師的人工智慧教程打call!

建立使用者介面執行緒

建立使用者介面執行緒 本人節選自 21天學通c 一書 說明 中使用了declare dyncreate巨集,使用該巨集表明mythread類具有動態建立的能力。使用declare message map巨集表明具有訊息對映,可以處理命令訊息。再開啟mythread類的實現檔案 mythread.cp...

使用者介面執行緒AfxBeginThread的使用

使用者介面執行緒在執行時會有乙個視窗介面和與其相對應的視窗函式,所以它可以通過響應訊息來和使用者進行互動。afxbeginthread 函式原型如下 cwinthread afxbeginthread cruntimeclass pthreadclass,從cwinthread派生的runtime ...

使用者介面執行緒AfxBeginThread的使用

使用者介面執行緒在執行時會有乙個視窗介面和與其相對應的視窗函式,所以它可以通過響應訊息來和使用者進行互動。afxbeginthread cwinthread afxbeginthread cruntimeclass pthreadclass,從cwinthread派生的runtime class類 ...