win32多執行緒 重寫訊息迴圈

2021-06-16 22:42:38 字數 2000 閱讀 4647

最近正在學習《win32多執行緒程式設計》,這是其中一段重寫訊息迴圈的**事例,以後可能用的上。

while (!quit || gnumprinting > 0)

// end if

else if (dwwake == wait_object_0 + gnumprinting)

// end if

translatemessage(&msg);

dispatchmessage(&msg);

}} // end while

}} // end while

說明:msgwaitformultipleobjects函式

該函式的特點是它不但可以等待核心物件,還可以等訊息。也就是當有訊息到來時,該函式也一樣可以返回,並處理訊息,這樣就給了工作執行緒退出的機會。

dword msgwaitformultipleobjects(

dword ncount, //要等待的核心物件數目

lphandle phandles, //要等待的核心物件控制代碼陣列指標

bool fwaitall, //是等待全部物件還是單個物件

dword dwmilliseconds,//等待時間 

dword dwwakemask );//等待的訊息型別

下面就詳解一下該函式的引數使用方法:

dword ncount:要等待的核心物件的數目。如果等待兩個執行緒退出,則ncount=2;

lphandle phandles:要等待的核心物件控制代碼陣列指標。

如果只要等待乙個執行緒退出,則直接設定該執行緒控制代碼的指標即可:

msgwaitformultipleobjects(1,&m_pthread->m_hthread,…)

如果要等待兩個執行緒退出,則使用方法為:

handle harray[2]=;

msgwaitformultipleobjects(2,harray,…)

bool fwaitall: true-表示只有要等待的執行緒全部退出後,此函式才返回,

false-表示要等待的執行緒中任意乙個退出了,或是有訊息到達了,此函式均會返回。

在上面的onbutton2()函式中,我要等待乙個執行緒退出,將fwaitall設定為

false,目的是無論是線**的退出了,還是有訊息到達了,該函式都能返回。

如果將該fwaitall設定為true,那麼函式返回的唯一條件是執行緒退出了,即便

是有訊息到來了,該函式也一樣不會返回。

dword dwmilliseconds:等待的事件,單位是毫秒。可以設定為infinite,無

窮等待dword dwwakemask:等待的訊息型別,通常可以設定為qs_allinput。此巨集表示的是可以等待任意型別的訊息。當然,也可以指定等待的訊息型別。

#define qs_allinput        (qs_input         | \

qs_postmessage   | \

qs_timer         | \

qs_paint         | \

qs_hotkey        | \

qs_sendmessage)

返回值:dword dret 通過函式返回值,可以得到一些有效資訊。函式返回值依fwaitall設定的不同而有所不同。下面是函式返回值的幾種常見型別:

dret = 0xffffffff :   表示函式呼叫失敗,可用getlasterror()得到具體的出錯資訊;

dret =wait_object_0+ncount:表示有訊息到達了;

如果fwaitall設定為true

dret = wait_object_0,表示所有等待的核心物件都激發了,或是執行緒都退出了;

如果fwaitall設定為false

dret = wait_object_0 ~ wait_object_0+ncount-1:表示等待的核心物件被激發了,index=dret - wait_object_0,表示harray陣列中索引為index的那個物件被激發了。

win32多執行緒 重寫訊息迴圈

最近正在學習 win32多執行緒程式設計 這是其中一段重寫訊息迴圈的 事例,以後可能用的上。while quit gnumprinting 0 end if else if dwwake wait object 0 gnumprinting end if translatemessage msg d...

WIN32多執行緒

win32多執行緒學習 1.執行緒建立 handle createthread lpsecurity attributes lpthreadattributes,dword dwstacksize,lpthread start routine lpstartaddress,lpvoid lppara...

Win32建立多執行緒

win32建立多執行緒,貼下 define win32 lean and mean include include include include include include include include include define max threads 3 dword winapi pr...