C++标准是否支持流程?

Jam*_*son 20 c++ c++11

我知道C++ 11增加了对线程的支持.例如:

#include <iostream>
#include <thread>

void bar()
{
    std::cout << "bar()\n";
}

int main()
{
    std::thread thread(bar);
    thread.join();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,有没有办法bar在单独的进程中执行该功能?如果没有,是否有关于是否应该添加此功能的讨论?

注意:我知道使用独立于平台的库的可能性,我只是好奇C++是否直接支持或将来支持.

πάν*_*ῥεῖ 10

不,c ++标准(特别是C++ 11)没有任何进程的概念(因此我不能在这里给你一个更合理的参考作为来自最流行和目前最新的c ++文档的搜索结果现场).

我也不知道为下一个标准版本C++ - 17(又名C++ - 1z)计划了流程支持.至少维基百科网站没有提到它.

有一个流行的实现被提议用于提升,但从未被用于C++标准提案.

您通常无法编写可移植代码以在仅存在一个进程的裸机系统上运行.


但是,有没有办法bar()在单独的进程中执行该功能?

要做到这一点,最简单的办法是退回到fork()wait()由POSIX公开组规定:

#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;
}
Run Code Online (Sandbox Code Playgroud)

虽然我没有看到创建额外进程来执行简单函数的重点.在这种情况下,创建流程会产生很多开销.

好吧,如果你想使用exec()函数系列中的函数启动另一个程序,这是一个不同的用例.

我建议坚持使用std::threads作为你的榜样.