为什么用PostMessage 程序就死掉?

guofei208 2007-12-14 02:20:57
while(stop==0)
{
while(HalfReady!=1)
AI_AsyncDblBufferHalfReady(cardID, &HalfReady, &fstop);
AI_AsyncDblBufferTransfer (cardID, InBuf);
AI_ContVScale (cardID, AD_U_10_V, InBuf, InVolBuf, ScanCount/2);

a1=::PostMessage(hwnd,WM_RDATA,0,(LPARAM)a); //为什么用PostMessage 程序就死掉,而用sendmessage 程序就可以正常运行???
}
如果把PostMessage 放到 循环外面 也可以使用 但无法实时观察。

不知道为什么 第一次提问 没分 抱歉啊
...全文
478 12 打赏 收藏 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hejun779 2007-12-15
  • 打赏
  • 举报
回复
3楼 CamelFang 说得很有道理!!

非常同意

消息处理的过程是要使用getmessage才能从消息队列中取消息!!!!!
使用postmessage这个函数,他只管向消息队列发送消息后马上返回,不管消息是否被处理,sendmessage则不一样,他会在内部调用getmessage,直到消息被处理了,才返回,所以在楼主上面的例子中,因为这个主线程一直在循环中发送消息,没有时间去处理消息,从而造成死循环!!!!
如果实在想用postmessage,可以采用新建一个死循环的子线程(注意不是主线程)进行消息发送即可
awperpvip 2007-12-14
  • 打赏
  • 举报
回复
PostMessage后面Sleep一下,等待对方
CamelFang 2007-12-14
  • 打赏
  • 举报
回复
很有可能啊,你死个劲的往队列里插,终于对方受不了了...
forceruler 2007-12-14
  • 打赏
  • 举报
回复
一般来讲是sendmessage比较容易造成死锁...
看起来只能搭车同意三楼的怀疑了
guofei208 2007-12-14
  • 打赏
  • 举报
回复
a (char *) 就是一个字符指针(常量)应该不会有影响。

我这个是不是循环太快了 消息阻塞了??



jameshooo 2007-12-14
  • 打赏
  • 举报
回复
还有一个问题,你的这个循环没有节制,只顾着发送消息,完全不管窗口有没有机会处理消息,如果消息得不到处理,你的循环最多执行10000次就会歇菜,因为消息队列满了
my_girlf 2007-12-14
  • 打赏
  • 举报
回复
严重同意3楼。
  • 打赏
  • 举报
回复
jameshooo说的有点道理。
可以看看是在处理消息时死掉的还是循环内死掉的
CamelFang 2007-12-14
  • 打赏
  • 举报
回复
SendMessage是要等收到消息的窗体处理完毕才返回,然后继续while循环.
PostMessage则是发完消息就立即返回while循环,完全不用管对方受得了受不了.
jameshooo 2007-12-14
  • 打赏
  • 举报
回复
a是什么数据类型?如果是一个指针,则缺乏数据保护,等消息被处理的时候a的内容可能已经变了
guofei208 2007-12-14
  • 打赏
  • 举报
回复
深夜等待中
robotom 2007-12-14
  • 打赏
  • 举报
回复
3楼有道理.
高度怀疑数据同步方面的问题.

15,465

社区成员

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

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