本文共 439 字,大约阅读时间需要 1 分钟。
如果,窗口是由非主线程创建的,那么,那个线程将会跑一个自己的窗口消息队列。调用SendMessage会切换到该线程上去执行。
主线程是个窗口线程,在另外一个工作线程中调用了窗口线程的SendMessage,那么执行的过程是:
1.工作线程挂起2.切换到窗口线程,执行对应的消息处理3.切换回工作线程SendMessage : 如果指定窗口由调用线程创建,那么窗口过程会被当成一个子程序立即调用。如果指定窗口由另外一个线程创建,那么系统会切换到那个线程,并且调用合适的窗口过程。在线程之间传递的消息仅仅当接收线程执行message retrieval code才会被处理。发送线程会被堵塞直到接收线程处理完消息。但是,发送线程在等待的同时会处理收到的nonqueued messages 。为了阻止这一点,使用带有SMTO_BLOCK参数 的SendMessageTimeout .
在多线程的程序里面,最好不要操作CWnd的实例指针,而是用API函数操作HWND窗口句柄。
转载地址:http://fopox.baihongyu.com/