日期:2014-05-18  浏览次数:21191 次

共享内存和sendmessage实现进程间通信
请问下大家,共享内存和sendmessage实现进程间通信有什么不同?sendmessage好像不行啊!
  我现在遇到一个问题,我就想进程A向进程B告知,触发相关处理事件。我用sendmessage好像不完全行得通!
  A进程用socket.connect连接远程服务器:
  第一种情况:当服务器不开机时就会一直阻止,直到报错errorcode 10060“由于连接方在一段时间内没有答复或连接的主机没有反应,连接尝试失败....”。这时用sendmessage是不可以的。
  第二种情况:如果开了服务器(上电),但不运行服务器程序,即不开服务器监听端口,则会报错errorcode 10060“由于目标机器积极拒绝,无法连接...”。这时用sendmessage是可以的。

  所以我认为是sendmessage是部分实现,所以请教大家谁能帮我解释下,为什么用sendmessage会出现这种情况?怎么解决呢?
  另外,请大家不要说是数据量的问题,在第一种情况下,及时发一个字节数据也不行;而在第二种情况下,把错误详细描述法过去,大概40-50个字节都是可以的!
   
  在网上看到共享内存实现进程间通信好像最优,谁能提供相关源代码或地址,以供测试学习?谢谢!


------解决方案--------------------
没明白, sendmessage(是API的 sendmessage 吗) 和你的socket怎么关联到一起的
------解决方案--------------------
我只想说不可能

都多少年了,多少程序员都用过了,有这种 大 bug

估计是你异常处理的问题


------解决方案--------------------
我也觉得是你程序上的问题,SendMessage要这么不靠谱,早就天下大乱了
------解决方案--------------------
http://blog.csdn.net/yefanqiu/article/details/1717458

可以参考参考这个
------解决方案--------------------
进程之间最好用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);