首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++标准支持流程吗?

C++标准支持流程吗?
EN

Stack Overflow用户
提问于 2016-02-09 19:27:45
回答 3查看 17.6K关注 0票数 24

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

代码语言:javascript
复制
#include <iostream>
#include <thread>

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

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

    return 0;
}

但是,是否有一种方法可以在单独的进程中执行bar函数?若否,当局有否讨论应否加入这类功能?

注意:,我知道使用平台独立库的可能性,我只是好奇C++是直接支持还是将来支持这个功能。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-09 19:43:11

不,c++标准(特别是C++11)对流程没有任何概念(因此,我不能从最流行和目前最最新的c++文档站点中为搜索结果提供更合理的引用)。

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

有一个流行的实现是为boost而提出的,但它从未被C++标准提案所吸引。

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

但是,是否有一种方法可以在单独的进程中执行bar()函数?

要做到这一点,最简单的选择是回到POSIX指定的fork()wait()

代码语言:javascript
复制
#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 。**

票数 15
EN

Stack Overflow用户

发布于 2019-06-18 09:42:37

Boost在版本1.64.0 (2017年4月)中开始支持流程。

0/doc/html/process.html

事实上,它是一个增强功能,这是未来C++标准中包含它的一个希望之源。

票数 4
EN

Stack Overflow用户

发布于 2022-09-27 08:39:45

有一个2019年拟议数,但势头似乎已经停滞了一点。

有关这方面的进展,请参见这个GitHub问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35300580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档