WM_COPYDATA的优先级问题 程序中需要由一个对象向其他若干个对象发送相同的消息,如何确保该次发送能不被消息接收方中断?肯请各位高手支招!新手,低分,见谅。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用SendMessage()进行传送数据 To send this message, call the SendMessage function as follows.WM_COPYDATA Message也只能由SendMessage发送,因为这个是需要接收方处理完才行的。你说的“不被消息接收方中断”是这个意思吗? 感谢回复,也许我没有说清楚。我在一个循环里面用SendMessage()发送若干个消息,但是一条消息发出去以后,启动了接受方的消息接收函数,待接收方完成了操作,才返回到发送方的循环继续发送消息,我的目的是最好能在发送的时候,优先完成发送消息的循环。发送消息的循环我是在一个高优先级的线程里面,可是也没有用。 在使用WM_COPYDATA消息时,只能用SendMessage()函数发送而不能使用PostMessage(),这两个函数虽然功能非常相似都是负责向指定的窗口发送消息,但是SendMessage()函数发出消息后不是马上返回,而是在接收方的消息响应函数处理完之后才能返回,并能够得到返回结果。在此期间发送方程序将被阻塞,SendMessage()后面的语句不能被继续执行。而PostMessage()函数在发出消息后马上返回,其后语句能够被立即执行,但是无法获取消息的执行结果。可见,在交换数据量较大的情况下实现数据频繁而又快速的交换用发送WM_COPYDATA消息的方法也是不合适的,当数据传输过于频繁时将有可能导致数据的丢失。如果是不想等待,且不怕消息丢失,可以考虑逐个窗口PostMessage或PostMessage(HWND_BROADCAST,...)的方式。 PostMessage可以使用,但是如果是跨进程传递内存地址数据,还是要用SendMessage 说的基本上是这个意思,但难道就没有不需等待,也不会导致消息丢失的解决办法吗?比如像erlang里面的邮箱技术? 说的基本上是这个意思,但难道就没有不需等待,也不会导致消息丢失的解决办法吗?比如像erlang里面的邮箱技术?============>PostMessage在同一进程内,传数据是可以的,但不要用本地变量. 感谢(慕白兄) 的热心。在编程之前,再请教一下,假设有a、b、c、d、e、f、g等若干个对象,a向b、c、d发送消息,e也向b、c、d发送消息,使用PostMessage会导致数据丢失吗?(考虑a和e发送消息是并发的) 在共享内存里规划空间即可,没有做不到的。只是可能这种方式不是最适合你的实现方式。POSTMESSAGE不保证投递消息过程的可靠性。 感谢(BellsOfFreedom)的回复。到目前为止,我认为邮件投递的方式最满足我的意图,但我不知道是否还有更简便的方式,而且我也还没有规划过邮件投递的实现方式,如有可能,再请赐教。 关于薪水问题有感而发。。。 如何使用TTS播放语音 VC的chtmlview在Navigate一个网页后,怎么让它不加载ActiveX 高手请进,包容控件问题??? 自动生成任意多边形 PeekMessage和GetMessage简单问题 new出来的 东西什么情况下能delete,什么情况下不能delete??? 如何在線程函數中調用其他類的函數? 请问在线程中,更新数据库,为什么会报错(但是程序,还可以正常运行,数据库也可以被更新) 怎么用vc++6.0读取wave文件的数据? VC2005的一个DLL工程,一个EXE工程,如果分别在两台电脑上编译,运行出错 算法导论高效学习方法探讨
在使用WM_COPYDATA消息时,只能用SendMessage()函数发送而不能使用PostMessage(),这两个函数虽然功能非常相似都是负责向指定的窗口发送消息,但是SendMessage()函数发出消息后不是马上返回,而是在接收方的消息响应函数处理完之后才能返回,并能够得到返回结果。在此期间发送方程序将被阻塞,SendMessage()后面的语句不能被继续执行。而PostMessage()函数在发出消息后马上返回,其后语句能够被立即执行,但是无法获取消息的执行结果。可见,在交换数据量较大的情况下实现数据频繁而又快速的交换用发送WM_COPYDATA消息的方法也是不合适的,当数据传输过于频繁时将有可能导致数据的丢失。如果是不想等待,且不怕消息丢失,可以考虑逐个窗口PostMessage或PostMessage(HWND_BROADCAST,...)的方式。
说的基本上是这个意思,但难道就没有不需等待,也不会导致消息丢失的解决办法吗?比如像erlang里面的邮箱技术?
============>
PostMessage在同一进程内,传数据是可以的,但不要用本地变量.
在共享内存里规划空间即可,没有做不到的。只是可能这种方式不是最适合你的实现方式。POSTMESSAGE不保证投递消息过程的可靠性。