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

时间:2016-02-09 19:27:46

标签: 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;
}

但是,有没有办法在单独的进程中执行bar函数?如果没有,是否应该添加这样的功能?

注意:我知道使用平台无关库的可能性,我只是好奇C ++是直接支持还是将来支持它。

2 个答案:

答案 0 :(得分:8)

不,c ++标准(特别是C ++ 11)没有任何关于进程的概念(因此我不能在这里给你一个更合理的引用{{3}来自最受欢迎且目前最新的c ++文档站点。)

我也不知道为下一个标准版本C ++ - 17(又名C ++ - 1z)计划了流程支持。至少search result没有提到它。

有一个受欢迎的Wikipedia Site被提议用于提升,但从来没有为C ++标准提案绘制。

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

  

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

最简单的选择是按POSIX Open Group的规定回退到implementationfork()

#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 ++标准中提供了希望。