我有一个用C ++ \ MFC编写的代码,它作为Windows服务和(正常)C ++ \ MFC Windows进程运行 - 现在我希望使用名为Mutex和共享内存(文件映射)在两者之间进行通信
这怎么可能?
答案 0 :(得分:3)
这取决于您的通信要求。通常,服务会创建互斥锁和共享内存,客户端会打开它们并执行操作。 OutputDebugString()是使用互斥锁和共享内存(以及某些事件)的IPC的典型示例。关于OutputDebugString()如何工作的Here is a detailed examination;你可以做类似的事情。
答案 1 :(得分:1)
我建议如下
service创建一个互斥锁,2个事件和一个内存映射文件(m.m.f),全部命名为
当服务必须将数据发送到其他进程时
一个。获得互斥锁的所有权
湾将数据写入m.m.f。
℃。信号事件#1,表示该服务具有该程序的新信息
d。发布互斥锁
当程序想要将数据发送到服务时
一个。获得互斥锁的所有权
湾将数据写入m.m.f。
℃。信号事件#2表示该程序具有服务的新信息
d。发布互斥锁
服务检查事件#2是否打开。如果不继续做它的东西,否则它:
一个。拥有m.m.f
的所有权湾读取数据
℃。重置事件#2
d。发布互斥
程序检查事件#1是否打开。如果不继续做它的东西,否则它:
一个。拥有m.m.f
的所有权湾读取数据
℃。重置事件#1
d。发布mutext
这种方法的问题是消息可能丢失(例如,当程序可以读取第一个消息时,服务设法连续写入2条消息)并且只有1个进程可以将自身附加到服务上(您有确保它)
我建议使用基于套接字的解决方案,如果可能的话,会出现更严重的问题。
P.S。你可以使用m.m.f来制作某种队列来避免第一个问题