共享内存和sendmessage实现进程间通信

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

所以我认为是sendmessage是部分实现,所以请教大家谁能帮我解释下,为什么用sendmessage会出现这种情况?怎么解决呢?
另外,请大家不要说是数据量的问题,在第一种情况下,及时发一个字节数据也不行;而在第二种情况下,把错误详细描述法过去,大概40-50个字节都是可以的!

在网上看到共享内存实现进程间通信好像最优,谁能提供相关源代码或地址,以供测试学习?谢谢!
...全文
456 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
CAOKAI2010 2012-05-12
  • 打赏
  • 举报
回复
postmessage根本是无法实现wm_copydata消息的!
贪玩的老鼠 2012-05-12
  • 打赏
  • 举报
回复
进程之间最好用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);
CAOKAI2010 2012-05-12
  • 打赏
  • 举报
回复
没人来解释一下吗?在第一种情况下,sendmessage返回了,没有一直阻止,但是窗口就是没收到消息并处理!奇怪啊!~
CAOKAI2010 2012-05-11
  • 打赏
  • 举报
回复
管道是不是更好用?来人指导哈!~
CAOKAI2010 2012-05-11
  • 打赏
  • 举报
回复
就是这么不可靠,我把conncect换成beginconncet就好了。
我猜想sendmessage基于消息的,conncect报错后消息是发出去了,虽然catch到错误,但可能还是阻止怎么的没运行过来。有文化的人,请用专业术语帮忙解释下!谢谢!

共享内存好像虽然能传递数据,但是好像不能主动告诉接收进程,如这里的B。
还是要么使用postmessage或sendmessage告知有数据来了。B进程再去读?
高手解释下,是否?
cnfixit 2012-05-11
  • 打赏
  • 举报
回复
http://blog.csdn.net/yefanqiu/article/details/1717458

可以参考参考这个
cnfixit 2012-05-11
  • 打赏
  • 举报
回复
我也觉得是你程序上的问题,SendMessage要这么不靠谱,早就天下大乱了
startstartsvip 2012-05-11
  • 打赏
  • 举报
回复
我只想说不可能

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

估计是你异常处理的问题

CAOKAI2010 2012-05-11
  • 打赏
  • 举报
回复
我是想用进程A操作socket,如果socket连接或通信出错了,就希望告知进程B。
这个告知的过程因为不同进程(实际上是不同程序),因此需要进程间通信,这里就是A用sendmessage来实时告知B出现了上述问题。
bdmh 2012-05-11
  • 打赏
  • 举报
回复 1
没明白, sendmessage(是API的 sendmessage 吗) 和你的socket怎么关联到一起的

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧