1) 我正在寻找一个非常简单的示例,分别包含两个函数(Parent、Child),它们将创建一个子进程,然后将子进程连接到父进程(父进程可以访问子进程中的变量) .请让示例尽可能简单,因为我很确定 Windows 代码是有意设计得尽可能复杂和困惑的。
2) 或者,我也愿意考虑替代 WINAPI 调用来创建父/子进程(只要它与 Windows 兼容)。
编译器是code::blocks,操作系统是Vista。如果可能的话,最好与其他操作系统兼容(我知道 WINAPI 不是,但这是我知道的唯一方法)。如果这些函数与 unix 函数(例如 fork)有相似之处,那就太好了。
3) 对于一个更难的替代方案,我怎样才能以这样的方式挂起一个函数,以便我可以做其他事情(然后返回到它)?该函数已定义且无法更改。
更新:
上下文: 从某种意义上说,有一个图形前端(父)和一个创建物理 [.png] 图像的函数(子)。问题是,物理图像渲染是一个阻塞过程,我想要在它运行期间有一个图形加载屏幕(创建 someimage.png 加载栏之类的东西)。只有两种方法可以做到这一点 - 父子关系或中断调用。
子进程可以运行该函数直到完成,此时父进程只是(从子进程)读取一个更新的变量来显示,或者进程只是暂时暂停函数,将加载图像绘制到屏幕,然后重新恢复。
最佳答案
你并不是真的在问一个问题,但让我们把这个当作一个问题:-)
基本上你想要一个迷你调试器。在弄清真正需要什么之后这不再是真的,但我会把代码片段留在原地,你永远不知道谁可能会感兴趣。
迷你调试器的最准系统代码如下所示:
int main()
{
STARTUPINFO si = STARTUPINFO();
si.cb = sizeof(STARTUPINFO);
PROCESS_INFORMATION pi;
if(CreateProcess("child.exe", 0, 0, 0, 0, DEBUG_PROCESS, 0, 0, &si, &pi))
{
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
else
{ // maybe print some error, or don't
return -1;
}
DEBUG_EVENT e;
while (WaitForDebugEvent(&e, INFINITE))
{
handle_debug_event(e); // in here goes your handling
}
return 0;
}
这将在加载/卸载 DLL 时、创建和终止线程时以及遇到未处理的异常或断点时自动通知您。它还为父进程提供了读写子进程内存、修改其线程上下文和设置断点的必要权限。
请参阅 MSDN 上的 DEBUG_EVENT
文档,并在您的 handle_debug_event
函数中执行任何您喜欢的操作。
关于c++ - Windows 中 code::blocks (C++) 中父/子进程的大多数准系统示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5883730/