关于多线程中使用SendMessage
2012-08-20 14:58
676 查看
如果,窗口是由非主线程创建的,那么,那个线程将会跑一个自己的窗口消息队列。调用SendMessage会切换到该线程上去执行。
主线程是个窗口线程,在另外一个工作线程中调用了窗口线程的SendMessage,那么执行的过程是:
1.工作线程挂起
2.切换到窗口线程,执行对应的消息处理
3.切换回工作线程
SendMessage : 如果指定窗口由调用线程创建,那么窗口过程会被当成一个子程序立即调用。如果指定窗口由另外一个线程创建,那么系统会切换到那个线程,并且调用合适的窗口过程。在线程之间传递的消息仅仅当接收线程执行message retrieval code才会被处理。发送线程会被堵塞直到接收线程处理完消息。但是,发送线程在等待的同时会处理收到的nonqueued
messages 。为了阻止这一点,使用带有SMTO_BLOCK参数 的SendMessageTimeout .
在多线程的程序里面,最好不要操作CWnd的实例指针,而是用API函数操作HWND窗口句柄。
主线程是个窗口线程,在另外一个工作线程中调用了窗口线程的SendMessage,那么执行的过程是:
1.工作线程挂起
2.切换到窗口线程,执行对应的消息处理
3.切换回工作线程
SendMessage : 如果指定窗口由调用线程创建,那么窗口过程会被当成一个子程序立即调用。如果指定窗口由另外一个线程创建,那么系统会切换到那个线程,并且调用合适的窗口过程。在线程之间传递的消息仅仅当接收线程执行message retrieval code才会被处理。发送线程会被堵塞直到接收线程处理完消息。但是,发送线程在等待的同时会处理收到的nonqueued
messages 。为了阻止这一点,使用带有SMTO_BLOCK参数 的SendMessageTimeout .
在多线程的程序里面,最好不要操作CWnd的实例指针,而是用API函数操作HWND窗口句柄。
相关文章推荐
- 关于iOS多线程的使用(主要是关于GCD的)
- 关于多线程的使用
- 一篇关于在COMBOBOX中使用SENDMESSAGE的实例
- 关于多线程的使用一些基本介绍
- 关于使用opencv的提速(二)(多线程问题,openMP)
- 关于使用多线程创建查询等待对话框
- 关于多线程使用的问题
- 关于使用opencv的提速(二)(多线程问题,openMP)
- 关于使用IO复用和多线程问题
- 关于使用opencv的提速(二)(多线程问题,openMP)
- java多线程中关于join方法的使用
- iOS开发中多线程间关于锁的使用
- java多线程中关于join方法的使用
- 关于多线程中单例模式的使用学习笔记
- 关于多线程中GCD的使用
- 关于Unity中协程、多线程、线程锁、www网络类的使用
- 易语言----关于超级网页访问模块 在多线程的使用中 出错的问题 讨论
- iphone多线程简介————关于NSOperation的使用(转自henry-sea的博客)
- 关于GCD创建多线程时使用不同队列的说明
- 关于SendMessage和PostMessage的使用感悟