描述:
我想在服务里面处理一个系统消息应该怎么做,新生成的服务程序在下面代码:
MSG msg;
while (GetMessage(&msg, 0, 0, 0))
DispatchMessage(&msg);
时就挂在while里面不执行了,我尝试了一下是GateMessage好像挂起了一样
解决方案1:
CrowReturns() 消息循环不用窗口也可以
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
单看这句确实没问题,但楼主是用::PostMessage(HWND_BROADCAST, msgExit, NULL, NULL);这句发全局消息给服务程序的,对于HWND_BROADCAST的情况,我上面已经列出SDK的说明,显然没有窗口是不行的。
当然,如果不加窗口,不能用HWND_BROADCAST这种方式发消息给服务程序,但可以用PostThreadMessage(有的放矢是可以的),那个线程ID可以有好多方法传给客户端,这里我建议使用file_mapping。
把GetMessage改成PeekMessage,GetMessage是同步的会被block住,一直到有消息返回。消息循环不用窗口也可以,因为GetMessage/PeekMessage是GUI API,一旦调用系统会为你创建消息队列的
解决方案3:HWND_BROADCAST : The message is posted to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows. The message is not posted to child windows.
解决方案4:第二个参数传INVALID_HANDLE_VALUE,才能取到线程消息