我在一个应用程序A中CreateProcess创建进程B,然后A使用SendMessage函数发送消息给B,通知他去某个地方取数据,然后由B进行数据的处理。
问题是:为什么有时候SendMessage成功,有时候不成功。

解决方案 »

  1.   

    SendMessage有返回值,返回值是处理消息的返回值,你可以检查返回值看是否真的调用。
      

  2.   

    在SendMessage返回失败时,用GetLastError()针对具体情况进行再判断
      

  3.   

    进程B没创建好窗口吧
    用WaitForInputIdle
      

  4.   

    你自己创建一个消息吧!做一下消息映射!在用SendMessage。。
      

  5.   

    在SendMessage返回失败时,用GetLastError()针对具体情况进行再判断
      

  6.   

    问一下,每次SendMessage函数都能执行下去,是不是说明它发送的消息被处理了?
      

  7.   

    我和楼上的不一样,重复没意思,我给你不一样的,那就是为什么有时SendMessage不成功,如下:一般Windows书籍上都是这样说的:SendMessage是不放进消息队列的(PostMessage将消息放进消息队列后立即返回),而是直接传给窗口,并调用窗口的过程函数进行处理。在窗口过程函数对消息处理完毕,该函数才返回。
    其实SendMessage传送的消息是进消息队列的,只不过每次进去都是放在队列的顶部,感觉就像是直接传给窗口一样。(我是从这里看到的:http://www.tinystrong.com/tag/sendmessage),所以啊,有时队列溢出还是会导致SendMesage不成功的啊,还有它可能延迟了其它消息的响应,因为它优先响应啊,而这些消息的响应可能和操作系统有关,导致出错,也有可能SendMessage不成功。
      

  8.   

     SendMessage 在本进程内是不进消息对列的,跨进程是会进消息队列的