能力值:
( LV2,RANK:10 )
|
-
-
2 楼
第一个问题,我觉得你的意思是要向某单一进程发送“消息”,但不支持向所有进程发送“消息”。如果是针对所有进程的“消息”,那么确定这条消息什么时候从消息队列中删除是比较困难的,因为所有的进程共用一个消息队列。
第二个问题,所有要处理这种“消息”的进程都在等待同一个信号,某进程等待成功之后却有可能发现这条“消息”不是发给本进程的。这种情况下,其他的进程仍有可能做同样错误的尝试,导致浪费。
基于以上两点我提出一种方案:根据每个进程的进程ID创建两个命名内核对象,一个信号量名为xxxx_s,其中xxxx是目标进程的ID,另一个为互斥量xxxx_m。目标进程开一个专门线程等待信号量,等到了获取互斥量,取“消息”,从队列中删除“消息”,释放互斥量,释放信号量;发送“消息”方根据发送目标的进程ID推算出内核对象名字,然后获取互斥量,增加消息到队列,释放互斥量,增加信号量;我认为这种方案可以解决上述两个问题。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
其中YQMAG结构体
DWORD dwDesId;
DWORD dwSrcId;
DWORD message;
DWORD wParam;
DWORD lParam;
DWORD dwPriority;//0最低,默认0
DWORD dwEventID;
根据dwSrcId dwDesId 来确定消息发送源进程ID 目的进程ID
每个进程创建一个线程互斥的访问这个消息队列,遍历消息队列,如果有符合自己进程ID的消息,则取出
|
|
|