關于多線程中使用SendMessage
如果,窗口是由非主線程創建的,那么,那個線程將會跑一個自己的窗口消息隊列。調用SendMessage會切換到該線程上去執行。
主線程是個窗口線程,在另外一個工作線程中調用了窗口線程的SendMessage,那么執行的過程是:
1.工作線程掛起
2.切換到窗口線程,執行對應的消息處理
3.切換回工作線程
SendMessage : 如果指定窗口由調用線程創建,那么窗口過程會被當成一個子程序立即調用。如果指定窗口由另外一個線程創建,那么系統會切換到那個線程,并且調用合適的窗口過程。在線程之間傳遞的消息僅僅當接收線程執行message retrieval code才會被處理。發送線程會被堵塞直到接收線程處理完消息。但是,發送線程在等待的同時會處理收到的nonqueued messages 。為了阻止這一點,使用帶有SMTO_BLOCK參數 的SendMessageTimeout .
在多線程的程序里面,最好不要操作CWnd的實例指針,而是用API函數操作HWND窗口句柄。