mfc多線程的實(shí)現(xiàn)方式 handle函數(shù)?
handle函數(shù)?HANDLE:Windows使用HANDLE來表示一個(gè)對(duì)象(不是C中的對(duì)象)。HWND是其中之一,HWND是一個(gè)句柄,但是句柄不僅僅是HWND。HandlMFC中的多線程如何實(shí)現(xiàn)。和
handle函數(shù)?
HANDLE:Windows使用HANDLE來表示一個(gè)對(duì)象(不是C中的對(duì)象)。HWND是其中之一,HWND是一個(gè)句柄,但是句柄不僅僅是HWND。Handl
MFC中的多線程如何實(shí)現(xiàn)。和單線程有啥區(qū)別?
Windows調(diào)度線程,多線程可以實(shí)現(xiàn)程序的實(shí)時(shí)多任務(wù),但也增加了程序的復(fù)雜度,即需要線程同步。
要實(shí)現(xiàn)一個(gè)線程,只需要AfxB
MFC中,我啟用線程后,在線程函數(shù)中如何獲取當(dāng)前光標(biāo)所在位置?
這個(gè)指針存儲(chǔ)在主線程的堆棧中,傳遞給子線程的指針實(shí)際上是訪問子線程的堆棧。當(dāng)然,不可能得到正確的值。其實(shí)直接傳光標(biāo)坐標(biāo)就可以了。在子線程中處理接口會(huì)導(dǎo)致頻繁的線程切換,影響效率。
子線程可以直接調(diào)用主線程方法嗎?
啟動(dòng)線程時(shí)有一個(gè)參數(shù)LPVOID,通過這個(gè)參數(shù)可以傳入主線程中的對(duì)象指針,子線程可以用這個(gè)指針調(diào)用它的成員函數(shù)。但需要注意的是,不要用子線程中的指針直接調(diào)用主線程中窗口對(duì)象的成員函數(shù)。這將導(dǎo)致一些潛在的錯(cuò)誤。因?yàn)镸FC不是線程安全的。
線程間通信有哪些方式?
多線程通信有三種主要方法:
1.全局變量
進(jìn)程中線程間的內(nèi)存共享是一種常見的通信和交互。
注意:定義全局變量時(shí)最好使用volatile,以防編譯器優(yōu)化這個(gè)變量。
消息機(jī)制
消息通信有兩個(gè)常見的接口:PostMessage和PostThreadMessage。
PostMessage向線程的主窗口發(fā)送一條消息。PostThreadMessage是任意兩個(gè)線程之間的通信接口。
()
功能原型:
B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM LPARAM);
參數(shù):
窗口程序接收消息的窗口的句柄??梢匀蓚€(gè)具有特定含義的值:
:消息被發(fā)送到系統(tǒng)的所有頂層窗口,包括不屬于自己的無效或不可見的窗口和被覆蓋的窗口。
和彈出窗口。消息不會(huì)發(fā)送到子窗口。
NULL:該函數(shù)的操作與調(diào)用PostThreadMessage函數(shù)相同,將參數(shù)dwThread設(shè)置為當(dāng)前線程的標(biāo)識(shí)符。
Msg:指定要發(fā)送的消息。
WParam:指定特定于消息的附加信息。
IParam:指定附加的特定于消息的信息。
返回值:如果函數(shù)調(diào)用成功,返回非零值;如果函數(shù)調(diào)用失敗,返回值為零。
MS還提供了用于消息間通信的SendMessage方法SendMessage(),它不同于PostMessage:
SendMessage是同步的,而PostMessage是異步的。SendMessage在返回之前必須等待發(fā)送的消息被執(zhí)行。
()
PostThreadMessage方法可以向指定的線程發(fā)送消息。
函數(shù)原型:Bool post Thread message(dword ID Thread,uintmsg,wparam wparam,lparam lparam)
參數(shù)除了ThreadId基本和PostMessage一樣。
目標(biāo)線程通過GetMessage()方法接受消息。
注意:使用這個(gè)方法時(shí),目標(biāo)線程必須已經(jīng)有了自己的消息隊(duì)列。否則,將返回ERROR_INVALID_THREAD_ID錯(cuò)誤??梢允褂?/p>
PeekMessage()為線程創(chuàng)建一個(gè)消息隊(duì)列。
3.CEvent
目標(biāo)
CEvent是MFC中的一個(gè)對(duì)象,通過改變CEvent的觸發(fā)狀態(tài)可以實(shí)現(xiàn)線程間的通信和同步。