在这两天的工作中,遇到了一个问题,在主进程中通过 CreateProcess 打开另外一个进程,然后使用 WaitForSingleObject 来进行调用进程的阻塞,等待被调用进程的返回,但是在被调用进程运行期间,如果对调用进程操作,将会出现一些奇怪的现象,就像是所有在开启子进程时的各种事件全部被快速地执行了。如下图 Demo 所示:

这是由于 WaitForSingleObject 阻塞了所有父进程的消息直到被调用进程返回时这些消息才被处理,处理这个问题的一个解决办法就是使用 MsgWaitForMultipleObjects 代替 WaitForSingleObject ,效果如下图所示:

其中执行部分关键代码如下:
DWORD ExcuteProcess(TCHAR *command, UINT cmdShow, int timeout

在创建子进程后,使用WaitForSingleObject可能导致主线程阻塞,忽略期间的消息处理。为了解决这个问题,可以改用MsgWaitForMultipleObjects,它允许在等待对象的同时处理消息,避免奇怪现象发生。文中提供了关键代码示例,并在Github上分享了Demo工程。

787

被折叠的 条评论
为什么被折叠?



