我需要我的应用程序能够在一个新的过程下运行一些方法,理想情况下,能够从这些方法获得返回值,但我还没有find我如何做到这一点(我的C + +知识是相当基本的)。
所以说得更好,比方说我有方法A,A1和A2。 方法A将开始执行,并在某个时候会:
在新的进程下运行方法A1
等待A1完成,并可能得到返回值
等待A2完成并再次获得返回值
在原始进程下继续运行代码
我发现我可以使用fork()在subprocess中运行代码,但是这不适合我的需求,因为它似乎是创build父进程的副本,而不仅仅是运行我只希望在新进程中的特定代码。 这里是我试过的一个摘录,我不知道是否可以修改它来做我想做的事,或者如果我完全使用其他的东西:
int main(){ std::cout << "START" << std::endl; test1(); test2(); std::cout << "FINISH" << std::endl; return 0; } void test1(){ pid_t pid = fork(); if (pid == 0){ int i = 0; for (; i < 5; ++i) { std::cout << "Test 1 " << std::endl; } } } void test2(){ pid_t pid = fork(); if (pid == 0){ int i = 0; for (; i < 5; ++i) { std::cout << "Test 2 " << std::endl; } } }
然而,这会导致test2()被执行两次,并且FINISH打印4次,因为父进程被复制到subprocess中。
可执行文件上的setuid似乎不起作用
在Windows 7 64位上从Delphi 7读取注册表的问题
在Windows上获取Python 2.7 64位的PIL而不是Pillow
如果我处理了工作的一个窗口,如何处理工作
_do_fork()如何返回两个不同的PID(一个用于父进程,一个用于subprocess)
我现在正在Linux上执行此操作,但最终还是需要对Windows执行相同的操作。
进程间通信(IPC)
进程pipe理在C:发送数据到父进程
获取进程的历史命令
Linux,waitpid,WNOHANG,subprocess,僵尸
Windows中活动进程列表的用途?
首先你的父进程应该wait子进程退出。
那么你的子进程一旦完成就应该exit ,否则这个函数将返回子进程和父进程。
这听起来像多线程可能是你最好的选择。 这样你就可以共享相同的内存空间,并且可以很容易地获得返回值。 看看使用OpenMP。 我认为这是迄今为止最简单的多线程方式。 您可以为并行块中的每个函数启动任务。
int main(){ std::cout << "START" << std::endl; int ret1,ret2; #pragma omp parallel { #pragma omp task ret1 = test1(); #pragma omp task ret2 = test2(); } //blocks at end of parallel block to wait for tasks to finish std::cout << "FINISH" << std::endl; return 0; } int test1(){ int i = 0; for (; i < 5; ++i) { std::cout << "Test 1 " << std::endl; } return 0; } int test2(){ int i = 0; for (; i < 5; ++i) { std::cout << "Test 2 " << std::endl; } return 0; }
我修改了我的浏览器中的代码,所以我不能保证它编译,但这是如何可以并行启动函数并获得返回值。 我不认为分叉是最好的办法,因为你需要某种进程间通信来获取数据。 另外OpenMP可能效率更高。 您也可以考虑使用PThreads,这是我认为OpenMP在支持上使用的,但是更复杂。 另外,如果你正在使用C ++ 11,请使用std :: async(…)来调用函数的线程。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。