c++ - Windows 中 code::blocks (C++) 中父/子进程的大多数准系统示例

标签 c++ windows

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/

相关文章:

C++ 通过套接字发送字符串

c++ - __thread C++ 内存泄漏

java - 无法在 Windows 上使用主/从机在 Jenkins 上运行 mvn.bat

python - 找不到我的 PYTHONPATH

javascript - 使用 JavaScript 检查浏览器是否支持自定义协议(protocol)?

c++ - 在 Linux 中从我的应用程序启动网页

c++ - 使用 union 作为 boost::asio 的序列化器

c# - 在哪里可以找到 Win32 常量?

windows - 将所有文件重命名为小写,替换空格

windows - 配置我的域以指向我的 Windows Vps(没有 plesk 或其他软件)