我知道 C++11 增加了对线程的支持。例如:
#include <iostream>
#include <thread>
void bar()
{
std::cout << "bar()\n";
}
int main()
{
std::thread thread(bar);
thread.join();
return 0;
}
但是,有没有办法在单独的进程中执行 bar
函数?如果没有,有没有讨论是否应该增加这样的功能?
注意:我知道使用独立于平台的库的可能性,我只是好奇 C++ 是否直接支持或将来会支持。
最佳答案
不,c++ 标准(尤其是 C++11)没有任何进程的概念(因此我无法在此处为您提供更合理的引用,如 search result 来自最流行和当前最新的 C++ 文档站点)。
我也不知道下一个标准版本 C++-17(又名 C++-1z)计划支持进程。至少 Wikipedia Site没提。
有一个受欢迎的implementation这是为提升而提出的,但从未为 C++ 标准提案而绘制。
您通常无法编写可移植代码以在仅存在一个 进程 的裸机系统上运行。
However, is there a way to execute the
bar()
function in a separate process?
最简单的选择是回退到 fork()
和 wait()
由 POSIX Open Group 指定:
#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
。
关于c++ - C++ 标准是否支持进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35300580/