我知道C ++ 11增加了对线程的支持。例如:
#include <iostream>
#include <thread>
void bar()
{
std::cout << "bar()\n";
}
int main()
{
std::thread thread(bar);
thread.join();
return 0;
}
但是,有没有办法在单独的进程中执行bar
函数?如果没有,是否应该添加这样的功能?
注意:我知道使用平台无关库的可能性,我只是好奇C ++是直接支持还是将来支持它。
答案 0 :(得分:8)
不,c ++标准(特别是C ++ 11)没有任何关于进程的概念(因此我不能在这里给你一个更合理的引用{{3}来自最受欢迎且目前最新的c ++文档站点。)
我也不知道为下一个标准版本C ++ - 17(又名C ++ - 1z)计划了流程支持。至少search result没有提到它。
有一个受欢迎的Wikipedia Site被提议用于提升,但从来没有为C ++标准提案绘制。
您通常无法编写可移植代码以在仅存在一个进程的裸机系统上运行。
但是,有没有办法在单独的进程中执行
bar()
函数?
最简单的选择是按POSIX Open Group的规定回退到implementation和fork()
:
#include <iostream>
#include <unistd.h>
#include <sys/wait.h>
void bar()
{
std::cout << "bar()\n";
}
int main(int argc, char **argv)
{
pid_t pid = fork();
if (pid == 0)
{
// child process
bar();
}
else if (pid > 0)
{
// parent process
wait(NULL);
}
else
{
// fork failed
std::cerr << "fork() failed!" << std::endl;
return 1;
}
return 0;
}
虽然我没有看到创建额外进程来执行简单函数的重点。在这种情况下,创建流程会产生很多开销。
好吧,如果你想使用exec()
函数系列中不同用例的函数启动另一个程序。
我建议坚持std::thread
为你的例子。
答案 1 :(得分:0)
Boost开始支持1.64.0版(2017年4月)中的流程。
https://www.boost.org/doc/libs/1_70_0/doc/html/process.html
它是Boost功能的事实为将其包含在将来的C ++标准中提供了希望。