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