我有一个启动子进程的 Windows 控制台应用程序。
如何向子进程发送消息?
我发现类似的功能PostMessage()/PeekMessage() http://msdn.microsoft.com/en-us/library/windows/desktop/ms632590%28v=vs.85%29.aspx- 这就是我所需要的,但据我了解,它在一个应用程序内部使用,并使用 HWND 来识别目标窗口(我的应用程序中没有窗口)。
我也读过有关的材料ipc http://msdn.microsoft.com/en-us/library/windows/desktop/aa365574%28v=vs.85%29.aspx,例如命名管道也需要 HWND。
我想要这样的东西:
[program 1]
int main()
{
CreateProcess(.., processInfo);
SendMessage(processId, message);
}
[program 2]
int main()
{
while(1)
{
// do thw work
Sleep(5 * 1000);
// check message
if(PeekMessage(message,..))
{
break;
}
}
}
子进程需要获取它应该完成其工作的消息,而不是立即终止,而是完成当前迭代。这就是为什么我不使用信号并且阻止“接收消息”也不合适。
[program 1]
int main()
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
std::string path = "c:\\program2.exe";
CreateProcess(path.c_str(), .. , &si, &pi ) )
Sleep(12 * 1000); // let program2 do some work
PostThreadMessage(pi.dwThreadId, 100, 0, 0);
}
[program 2]
int main(int argc, char * argv[])
{
MSG message;
for(int i = 0; i < 1000; i++)
{
std::cout << "working" << std::endl;
Sleep(2 * 1000);
if(PeekMessage(&message, NULL, 0, 0, PM_NOREMOVE))
{
break;
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)