关于给工作线程循环传递消息

Puzzor 2011-09-05 08:43:06
我有一个工作线程m_workthread,如果单执行一次m_workthread->PostThreadMessage(WM_ADD,0,0);就没有问题。但是如果变成
	for(int i=0;i<2;i++)
m_workthread->PostThreadMessage(WM_ADD,0,0);
线程就只会响应一次,为什么啊?搞不懂诶
...全文
112 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Puzzor 2011-09-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 bokutake 的回复:]

你的工作线程是用PeekMessage取的消息么?
另外你的消息用没用RegisterWindowMessage注册呢?
[/Quote]是peekmessage,我用的是自定义的消息,还要用regesiterwindowmessage么?
Puzzor 2011-09-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 shidaji 的回复:]

[Quote=引用 4 楼 quwei197874 的回复:]

for下加个括号
[/Quote]啥意思?
[/Quote]啥意思?
SEESEECN 2011-09-06
  • 打赏
  • 举报
回复
你的工作线程里面有循环么?没有循环的话,线程的入口函数执行完一次就返回了,当然只能响应一次了。
Puzzor 2011-09-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 visualeleven 的回复:]
引用楼主 shidaji 的回复:
我有一个工作线程m_workthread,如果单执行一次m_workthread->PostThreadMessage(WM_ADD,0,0);就没有问题。但是如果变成C/C++ code
for(int i=0;i<2;i++)
m_workthread->PostThreadMessage(WM_ADD,0,0);
线程就只会响应一次,为什么啊?搞不……
[/Quote]
UINT CMainView::workThread( LPVOID param )
{

for(;PeekMessage(&MainView->m_custommessage,NULL,0,0,PM_REMOVE););
MainView->m_custommessage.message = 0;
while(true)
{
switch (MainView->m_custommessage.message)
{
case WM_CLOSETHREAD:
{.......
return 0}
case case WM_ADD:
{
.......
for(;PeekMessage(&MainVegaView->m_custommessage,NULL,0,0,PM_REMOVE););
MainVegaView->m_custommessage.message=0;
break;
}
}
}
}
辰岡墨竹 2011-09-05
  • 打赏
  • 举报
回复
你的工作线程是用PeekMessage取的消息么?
另外你的消息用没用RegisterWindowMessage注册呢?
Puzzor 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kaile 的回复:]

可能是收到了正在处理没有处理完,响应不了下一个消息,丢弃了
[/Quote]问题是他响应最后一个消息而不是第一个
Puzzor 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 quwei197874 的回复:]

for下加个括号
[/Quote]啥意思?
Eleven 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用楼主 shidaji 的回复:]
我有一个工作线程m_workthread,如果单执行一次m_workthread->PostThreadMessage(WM_ADD,0,0);就没有问题。但是如果变成C/C++ code
for(int i=0;i<2;i++)
m_workthread->PostThreadMessage(WM_ADD,0,0);
线程就只会响应一次,为什么啊?搞不懂诶
[/Quote]
你工作线程里的消息循环怎么写的?
quwei197874 2011-09-05
  • 打赏
  • 举报
回复
for下加个括号
Kaile 2011-09-05
  • 打赏
  • 举报
回复
可能是收到了正在处理没有处理完,响应不了下一个消息,丢弃了
Puzzor 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 danxuezx 的回复:]
试一下下面的代码看会响应几次:

C/C++ code
for(int i=0;i<2;i++)
{
m_workthread->PostThreadMessage(WM_ADD,0,0);
Sleep(1);
}
[/Quote]
一次!而且是最后一次才响应,就是第一次的post没有响应,但是每一次的post都返回true
danxuezx 2011-09-05
  • 打赏
  • 举报
回复
试一下下面的代码看会响应几次:
 for(int i=0;i<2;i++)
{
m_workthread->PostThreadMessage(WM_ADD,0,0);
Sleep(1);
}

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧