1)我正在寻找两个函数(父,子)分别创build一个subprocess,然后将subprocess连接到父进程(父进程可以访问subprocess中的variables)的一个准系统示例。 请保持这个例子尽可能简单,因为我非常确定windows代码被有目的地devise成尽可能复杂和混乱。
2)或者,我也愿意考虑交替的WINAPI调用创build父/subprocess(只要它与Windows兼容)。
编译器是code :: blocks,OS是Vista。 与其他操作系统的兼容性是非常优选的,如果可能的话(我知道WINAPI不是,但它是我知道的唯一的方法)。 如果函数与unix函数有相似之处(例如fork),那将是非常好的。
3)对于更难的select,我怎样才能暂停一个function,我可以做其他事情(然后返回到它)? 该function已被定义,不能改变。
更新:
上下文:从某种意义上说,有一个graphics前端(父)和一个创build物理[.png]图像(子)的函数。 问题是,物理图像渲染是一个阻塞的过程,我想要一个graphics加载屏幕在它运行的时间(创buildsomeimage.png加载酒吧sorta事情)。 只有两种方法可以做到这一点 – 父子或中断呼叫。
孩子可以运行函数,直到父母刚刚读取一个更新的variables(从孩子)显示的过程完成,或者过程只是暂时停止function,绘制加载图像到屏幕上,然后重新恢复。
你不是在问一个问题,但是让我们来看看这个问题:-)
基本上你想要一个微型调试器。 在澄清真正需要的东西之后,这不再是真实的,但是我将把这个片段留下来,你永远不知道谁可能会感兴趣。
迷你调试器的最准系统代码如下所示:
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函数中执行任何你喜欢的操作。