程序中需要由一个对象向其他若干个对象发送相同的消息,如何确保该次发送能不被消息接收方中断?肯请各位高手支招!
新手,低分,见谅。

解决方案 »

  1.   

    用SendMessage()进行传送数据
      

  2.   

    To send this message, call the SendMessage function as follows.WM_COPYDATA Message也只能由SendMessage发送,因为这个是需要接收方处理完才行的。你说的“不被消息接收方中断”是这个意思吗?
      

  3.   

    感谢回复,也许我没有说清楚。我在一个循环里面用SendMessage()发送若干个消息,但是一条消息发出去以后,启动了接受方的消息接收函数,待接收方完成了操作,才返回到发送方的循环继续发送消息,我的目的是最好能在发送的时候,优先完成发送消息的循环。发送消息的循环我是在一个高优先级的线程里面,可是也没有用。
      

  4.   


    在使用WM_COPYDATA消息时,只能用SendMessage()函数发送而不能使用PostMessage(),这两个函数虽然功能非常相似都是负责向指定的窗口发送消息,但是SendMessage()函数发出消息后不是马上返回,而是在接收方的消息响应函数处理完之后才能返回,并能够得到返回结果。在此期间发送方程序将被阻塞,SendMessage()后面的语句不能被继续执行。而PostMessage()函数在发出消息后马上返回,其后语句能够被立即执行,但是无法获取消息的执行结果。可见,在交换数据量较大的情况下实现数据频繁而又快速的交换用发送WM_COPYDATA消息的方法也是不合适的,当数据传输过于频繁时将有可能导致数据的丢失。如果是不想等待,且不怕消息丢失,可以考虑逐个窗口PostMessage或PostMessage(HWND_BROADCAST,...)的方式。
      

  5.   

    PostMessage可以使用,但是如果是跨进程传递内存地址数据,还是要用SendMessage
      

  6.   


    说的基本上是这个意思,但难道就没有不需等待,也不会导致消息丢失的解决办法吗?比如像erlang里面的邮箱技术?
      

  7.   

    说的基本上是这个意思,但难道就没有不需等待,也不会导致消息丢失的解决办法吗?比如像erlang里面的邮箱技术?
    ============>
    PostMessage在同一进程内,传数据是可以的,但不要用本地变量.
      

  8.   

    感谢(慕白兄) 的热心。在编程之前,再请教一下,假设有a、b、c、d、e、f、g等若干个对象,a向b、c、d发送消息,e也向b、c、d发送消息,使用PostMessage会导致数据丢失吗?(考虑a和e发送消息是并发的)
      

  9.   


    在共享内存里规划空间即可,没有做不到的。只是可能这种方式不是最适合你的实现方式。POSTMESSAGE不保证投递消息过程的可靠性。
      

  10.   

    感谢(BellsOfFreedom)的回复。到目前为止,我认为邮件投递的方式最满足我的意图,但我不知道是否还有更简便的方式,而且我也还没有规划过邮件投递的实现方式,如有可能,再请赐教。