线程间发送窗口自定义消息可靠吗?

voodoo82 2005-01-05 02:28:56
程序中的两个窗口线程,本来通过WM_COPYDATA消息相互发送消息,但在系统资源紧张的时候偶尔会出现发送窗口成功发出消息后,接收窗口却没有收到的情况。这BUG出现机率很低,因为线程间发送的数据很简单,现在想用自定义消息替换掉WM_COPYDATA消息,但不知道这样可不可以解决这个BUG。因为BUG不容易出现,可能得花好几天来验证,有人能从理论上说明WM_COPYDATA消息发送失败的原因吗?这个问题搞的我很头疼。
...全文
160 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ilovevc 2005-01-05
  • 打赏
  • 举报
回复
你如果在同一个进程中,为什么不直接在cirtical section保护下Call那个函数呢?
oyljerry 2005-01-05
  • 打赏
  • 举报
回复
^_^,me too
SendMessage硬是不返回success
voodoo82 2005-01-05
  • 打赏
  • 举报
回复
To DentistryDoctor(雅克医生<改行做程序员了>) :
WM_COPYDATA当然要用SendMessage发了。
To Anikan(皮皮鱼)
资源紧张因为环境和程序使用的原因是无法避免的。

WM_COPYDATA消息的问题我以前在这里提问过,当发送窗口发送WM_COPYDATA失败时SendMessage返回的是0,如果发送正确返回的是1,当时我写LOG文件记录的结果是接收窗口没有收到发来的WM_COPYDATA消息。当时我想采用如果SendMessage返回0后就循环重新发送,但是我重发了10分钟也不能重发成功,所以只好放弃。用直接函数调用是个办法,但是有点困难,我尝试一下。

还请各位高手继续解答。
Anikan 2005-01-05
  • 打赏
  • 举报
回复
那你应该避免资源紧张。
oyljerry 2005-01-05
  • 打赏
  • 举报
回复
这里函数调用指直接调用函数,而不是通过消息,然后在消息映射函数中调用
HunterForPig 2005-01-05
  • 打赏
  • 举报
回复
(巫毒) 怀念你辉煌的时代
sinall 2005-01-05
  • 打赏
  • 举报
回复
当资源紧张的时候,还有是么是可靠的?
直接调用函数就可靠吗?

谁来告诉我SendMessage就不是函数调用!
oyljerry 2005-01-05
  • 打赏
  • 举报
回复
有时SendMessage没有返回
DentistryDoctor 2005-01-05
  • 打赏
  • 举报
回复
是PostMessage还是SendMessage?
oyljerry 2005-01-05
  • 打赏
  • 举报
回复
WM_COPYDATA消息,我也碰到过丢失
同一进程,如vcleaner所说,可以想办法用函数调用实现
老夏Max 2005-01-05
  • 打赏
  • 举报
回复
关注一下!可能任何的消息发送都不是可靠的。系统资源紧张的时候,可能连必要的资源都无法分配,所以导致发送消息失败!呵呵,最可靠的还是直接调用函数。但是你的问题是在两个窗口线程中,如果这两个线程属于一个进程,也可以想办法直接调用函数;如果是不属于一个进程,那么可能就需要使用其他的机制保证消息的发送是否成功,但使用什么机制呢?请高手解答!

15,471

社区成员

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

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