请问在在工作线程中建立消息循环要用到PeekMessage(),然后再在循环体中调用GetMessage()处理用到的消息。PeekMessage它的最后一个参数是用PM_NOREMOVE还是PM_REMOVE呢?有什么区别?UINT ThreadFunc(LPVOID lParam)
{
...
PeekMessage(&msg,NULL,WM_USER,WM_USER,PM_REMOVE); //建立消息循环
while (TRUE)
{
if(GetMessage(&msg,NULL,0,0))
{
switch(msg.message)
{
...
}
}
} return 0;
}
{
...
PeekMessage(&msg,NULL,WM_USER,WM_USER,PM_REMOVE); //建立消息循环
while (TRUE)
{
if(GetMessage(&msg,NULL,0,0))
{
switch(msg.message)
{
...
}
}
} return 0;
}
解决方案 »
- 我把控制台程序写成dll,link的时候报错error LNK2001: unresolved external symbol __mbctype
- TCHAR字符的问题
- object arx的问题
- 困扰多天的问题,各位行行好吧!要死了!
- CStdioFile ReadString()出错了
- 一个算法问题,来提供一点思路即可
- 请教:实在是不会,如何从CString中提取字符串并存到char*数组中。
- 怎么在CListCtrl的同一行里设置两个以上的图标?
- vc的文件操作的几个问题
- 有关ListView!!
- 读文件的过程更新进度条的问题
- Socket接受多个连接,以及为每个连接Socket开一个线程的问题
你这段代码不需要使用PeekMessage这个语句,因为后面马上就是消息循环体,也会帮你建立消息队列。
只有一种情况需要使用PeekMessage来建立消息队列,那就是Peek之后会有一段时间执行某项工作,然后才正式消息循环,但是消息循环之前可能会有别的线程向你的线程发送消息过来,此时就要预先建立消息队列。
1. GetMessage将等到有合适的消息时才返回, 而PeekMessage只是撇一下消息队列。
2. GetMessage会将消息从队列中删除, 而PeekMessage可以设置最后一个参数wRemoveMsg来决定是否将消息保留在队列中, PM_NOREMOVE为保留, PM_REMOVE为不保留。