大多数准系统示例的父/子进程在代码::块 (C++) 的窗口中
Most barebones example of parent/child process in windows on code::blocks (C++)
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
函数中执行任何您喜欢的操作。
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 问:如何使用C++中的按钮从窗口打开窗口
- SDL 窗口不会弹出
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 如何在cpp文件之间切换窗口?在Qt中
- QuadTree只在窗口的右上角绘制
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 如何在C++中找到active directory中禁用和锁定的窗口帐户
- 处理闪烁窗口事件
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- C++win32 API创建多个类似视口的窗口
- SFML RenderWindow打开窗口需要很长时间
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 获取 SFML 窗口的 HWND 和高可用性?
- 如何获取 GLFW 窗口 ID?
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- 用于窗口的 HID 终端
- SFML 文本未绘制在窗口上
- 如何为窗口截屏
- 由于无效的 ValidateRgn() 子窗口不会收到WM_PAINT消息