大多数准系统示例的父/子进程在代码::块 (C++) 的窗口中

Most barebones example of parent/child process in windows on code::blocks (C++)

本文关键字:C++ 窗口 代码 子进程 系统 大多数      更新时间:2023-10-16

1) 我正在寻找一个非常准系统的示例,分别包含两个函数(父进程、子进程),这两个函数将创建一个子进程,然后将子进程连接到父进程(父进程可以访问子进程中的变量)。请使示例尽可能简单,因为我很确定Windows代码是故意设计的,尽可能复杂和混乱。

2)或者,我也愿意考虑WINAPI调用的替代方法来创建父/子进程(只要它与Windows兼容)。

编译器是代码::blocks,操作系统是Vista。如果可能的话,与其他操作系统的兼容性是非常可取的(我知道WINAPI不是,但这是我所知道的唯一方法)。如果这些函数与 unix 函数(例如 fork)有相似之处,那就太好了。

3)对于更难的选择,我如何以可以做其他事情的方式挂起一个函数(然后返回它)?该函数已定义,无法更改。

更新:

上下文:从某种意义上说,有一个图形前端(父级)和一个创建物理[.png]图像(子级)的函数。问题是,物理图像渲染是一个阻塞过程,我想要在它运行时有一个图形加载屏幕(创建一些图像.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 函数中执行任何您喜欢的操作。