我编写了一个多线程程序,各个线程之间要频繁的进行相互的通信,我用PostMessage发送消息,但消息老是丢,有什么方法能向一个线程发送消息,并保证消息不丢失吗??  SendMessage成吗??

解决方案 »

  1.   

    用SendMessage 缺点是有时候阻塞
      

  2.   

    在线程里用SendMessage产生死锁的可能性会提高,
      

  3.   

    SendMessage要等待消息确认后再执行下一步
      

  4.   

    多PostMessage几次或者要求接收线程也PostMessage过来告诉你它已经知道了,如果没收到确认消息,再重发就是了
      

  5.   

    不用message,用内存文件来传递数据试试看
    good luck!
      

  6.   

    用sendMessage发消息是肯定能发过去吗?? 消息肯定不会丢失是吗??
      

  7.   

    Windows系统是由消息机制驱动的,每个线程如果建立了一个窗口,则由系统分配一个消息队列用于窗口消息的处理。PostMessage就是将你的消息放入窗口的消息队列中即立即返回,不必等待窗口线程处理,另外,消息也可以不经过消息队列而利用SendMessage函数直接发送给窗口,窗口过程将处理这个消息,但只有当消息被处理之后,SendMessage才能返回到调用程序。
      

  8.   

    PostMessage把消息扔到消息队列就不管了,因而在系统处理比较繁忙时,可能消息得不到处理
    可以用PV操作,同步等手段来处理
      

  9.   

    可以用SendMessageCallback,也是异步的.
      

  10.   

    在线程之间发送消息 应该使用 PostThreadMessage. PostMessage 是向窗口发送消息. 不一样的.通常,你的自定义消息是不会丢失的. 系统忙的时候会丢掉一些它认为不重要的消息,比如 鼠标移动. 自定义的消息不在此范围内.
      

  11.   

    1、PostThreadMessage 才能向线程发送消息
    2、Windows系统自己管理消息队列,一般是不会丢失的.
    3、处理的消息最好取出来,然后清除。
    4、Windows系统自己维护的消息队列,具它说的是可以自动增长适应的,
    可是实际上,在Win2k 和 WinXP 下,支持的消息队列最大长度也就 10,000 条,超过的消息会被丢弃。
      

  12.   

    使用 SendMessage 可能不利于同步,你可以通过管道、邮槽、共享内存区等方法来进行通讯
    或者只要作好线程同意,PostMessage也是可以处理的
      

  13.   

    怎么可能,postmessage消息总是丢。微软还没有这么差。老兄,肯定是你自己使用不当。
      

  14.   

    我觉得POST不会丢消息的啊,很稳定
    可能是不是线程太多,调度来不及就自动抛了消息
    如果是这样,就建议做全局连表来放消息,不过你得自己维护连表,用互斥变量控制好。容易出错
      

  15.   

    你需要接收到消息的线程级别比调用postmessage函数的线程级别高,没有时间来执行postmessage消息,可以使用sendmessage函数,使用不进队列消息。我以前也有过你这种情况,后来发现是自己没设计好线程模型。我建议你好好规划一下你的模式,是不是因为思想有错误。
      

  16.   

    flysec(flysec) 说得对,我是在线程开得比较多的时候(大概20个)才出现postMessage消息丢失的现象,开得线程数少就没问题。“线程太多,调度来不及系统就自动抛消息”是怎么一会事呀???
      

  17.   

    消息好像不会丢吧,对于需要传送给窗口进程的消息要使用PostMessage进行发送,对于给线程的消息要使用
    PostThreadMessage来使用