请问下大家,共享内存和sendmessage实现进程间通信有什么不同?sendmessage好像不行啊!
    我现在遇到一个问题,我就想进程A向进程B告知,触发相关处理事件。我用sendmessage好像不完全行得通!
    A进程用socket.connect连接远程服务器:
    第一种情况:当服务器不开机时就会一直阻止,直到报错errorcode 10060“由于连接方在一段时间内没有答复或连接的主机没有反应,连接尝试失败....”。这时用sendmessage是不可以的。
    第二种情况:如果开了服务器(上电),但不运行服务器程序,即不开服务器监听端口,则会报错errorcode 10060“由于目标机器积极拒绝,无法连接...”。这时用sendmessage是可以的。    所以我认为是sendmessage是部分实现,所以请教大家谁能帮我解释下,为什么用sendmessage会出现这种情况?怎么解决呢?
    另外,请大家不要说是数据量的问题,在第一种情况下,及时发一个字节数据也不行;而在第二种情况下,把错误详细描述法过去,大概40-50个字节都是可以的!
    
    在网上看到共享内存实现进程间通信好像最优,谁能提供相关源代码或地址,以供测试学习?谢谢!

解决方案 »

  1.   

    没明白, sendmessage(是API的 sendmessage 吗) 和你的socket怎么关联到一起的
      

  2.   

    我是想用进程A操作socket,如果socket连接或通信出错了,就希望告知进程B。
    这个告知的过程因为不同进程(实际上是不同程序),因此需要进程间通信,这里就是A用sendmessage来实时告知B出现了上述问题。
      

  3.   

    我只想说不可能都多少年了,多少程序员都用过了,有这种 大 bug估计是你异常处理的问题
      

  4.   

    我也觉得是你程序上的问题,SendMessage要这么不靠谱,早就天下大乱了
      

  5.   

    http://blog.csdn.net/yefanqiu/article/details/1717458可以参考参考这个
      

  6.   

    就是这么不可靠,我把conncect换成beginconncet就好了。
    我猜想sendmessage基于消息的,conncect报错后消息是发出去了,虽然catch到错误,但可能还是阻止怎么的没运行过来。有文化的人,请用专业术语帮忙解释下!谢谢!共享内存好像虽然能传递数据,但是好像不能主动告诉接收进程,如这里的B。
    还是要么使用postmessage或sendmessage告知有数据来了。B进程再去读?
    高手解释下,是否?
      

  7.   

    没人来解释一下吗?在第一种情况下,sendmessage返回了,没有一直阻止,但是窗口就是没收到消息并处理!奇怪啊!~
      

  8.   

    进程之间最好用PostMessage, 发送广播消息HWND_BROADCAST;使用共享内存最好A进程写,B进程读 //下面是C的写代码(读的代码差不多
    m_hMapObject=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,
    PAGE_READWRITE, 0,0x1000, _TEXT("agen_login"));    
    if(!m_hMapObject)
    {
        AfxMessageBox("Can't open shared memory file,please run 'Send' first.");
        return ;
    }
    m_pszMapView=(LPSTR)MapViewOfFile(m_hMapObject,FILE_MAP_WRITE, 0, 0,0);
    if(!m_pszMapView)
    {
    if (m_hMapObject) CloseHandle(m_hMapObject);
    AfxMessageBox("Unable to map shared memory file.");
    return ;
    }
    strValue.Format("%ld,%s",dbSet.m_EmployeeId,dbSet.m_EmployeeName);
    strcpy(m_pszMapView,strValue);
      

  9.   

    postmessage根本是无法实现wm_copydata消息的!