我知道C++11增加了对线程的支持。例如:
#include <iostream>
#include <thread>
void bar()
{
std::cout << "bar()\n";
}
int main()
{
std::thread thread(bar);
thread.join();
return 0;
}但是,是否有一种方法可以在单独的进程中执行bar函数?若否,当局有否讨论应否加入这类功能?
注意:,我知道使用平台独立库的可能性,我只是好奇C++是直接支持还是将来支持这个功能。
发布于 2016-02-09 19:43:11
不,c++标准(特别是C++11)对流程没有任何概念(因此,我不能从最流行和目前最最新的c++文档站点中为搜索结果提供更合理的引用)。
我也不知道计划为下一个标准版本C++-17 (又名C++-1z)提供进程支持。至少维基百科网站没有提到这一点。
有一个流行的实现是为boost而提出的,但它从未被C++标准提案所吸引。
您通常无法编写可移植的代码在仅存在一个进程的裸金属系统上运行。
但是,是否有一种方法可以在单独的进程中执行
bar()函数?
要做到这一点,最简单的选择是回到POSIX指定的fork()和wait():
#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**s 。**
发布于 2019-06-18 09:42:37
发布于 2022-09-27 08:39:45
有一个2019年拟议数,但势头似乎已经停滞了一点。
有关这方面的进展,请参见这个GitHub问题。
https://stackoverflow.com/questions/35300580
复制相似问题