程序中的两个窗口线程,本来通过WM_COPYDATA消息相互发送消息,但在系统资源紧张的时候偶尔会出现发送窗口成功发出消息后,接收窗口却没有收到的情况。这BUG出现机率很低,因为线程间发送的数据很简单,现在想用自定义消息替换掉WM_COPYDATA消息,但不知道这样可不可以解决这个BUG。因为BUG不容易出现,可能得花好几天来验证,有人能从理论上说明WM_COPYDATA消息发送失败的原因吗?这个问题搞的我很头疼。

解决方案 »

  1.   

    WM_COPYDATA消息,我也碰到过丢失
    同一进程,如vcleaner所说,可以想办法用函数调用实现
      

  2.   

    当资源紧张的时候,还有是么是可靠的?
    直接调用函数就可靠吗?谁来告诉我SendMessage就不是函数调用!
      

  3.   

    To DentistryDoctor(雅克医生<改行做程序员了>) :
        WM_COPYDATA当然要用SendMessage发了。
    To Anikan(皮皮鱼)
       资源紧张因为环境和程序使用的原因是无法避免的。WM_COPYDATA消息的问题我以前在这里提问过,当发送窗口发送WM_COPYDATA失败时SendMessage返回的是0,如果发送正确返回的是1,当时我写LOG文件记录的结果是接收窗口没有收到发来的WM_COPYDATA消息。当时我想采用如果SendMessage返回0后就循环重新发送,但是我重发了10分钟也不能重发成功,所以只好放弃。用直接函数调用是个办法,但是有点困难,我尝试一下。还请各位高手继续解答。
      

  4.   

    ^_^,me too 
    SendMessage硬是不返回success
      

  5.   

    你如果在同一个进程中,为什么不直接在cirtical section保护下Call那个函数呢?