天天看點

關于多線程中使用SendMessage

如果,視窗是由非主線程建立的,那麼,那個線程将會跑一個自己的視窗消息隊列。調用SendMessage會切換到該線程上去執行。

主線程是個視窗線程,在另外一個工作線程中調用了視窗線程的SendMessage,那麼執行的過程是:

1.工作線程挂起

2.切換到視窗線程,執行對應的消息處理

3.切換回工作線程

SendMessage : 如果指定視窗由調用線程建立,那麼視窗過程會被當成一個子程式立即調用。如果指定視窗由另外一個線程建立,那麼系統會切換到那個線程,并且調用合适的視窗過程。線上程之間傳遞的消息僅僅當接收線程執行message retrieval code才會被處理。發送線程會被堵塞直到接收線程處理完消息。但是,發送線程在等待的同時會處理收到的nonqueued messages 。為了阻止這一點,使用帶有SMTO_BLOCK參數 的SendMessageTimeout .

在多線程的程式裡面,最好不要操作CWnd的執行個體指針,而是用API函數操作HWND視窗句柄。

繼續閱讀