首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MultiTasking不在我的C++11程序中工作

MultiTasking不在我的C++11程序中工作
EN

Stack Overflow用户
提问于 2012-01-18 18:17:13
回答 5查看 225关注 0票数 1

如何在不暂停主函数的情况下并行启动新线程?

这是我的代码:

代码语言:javascript
复制
void someFunction { while(1);}

int main(){

thead *th = new thead(&someFunction);
thead.join();
return 0;

}

但是程序并没有停止

P.S.如何在并行源中运行线程

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-18 18:24:17

这一呼吁:

代码语言:javascript
复制
thread.join();

明确地告诉您的程序要等到thread执行的函数才返回。您的函数永远不会返回,所以您的程序永远不会通过这个函数调用。您可以在线程创建和相应的join()调用之间启动额外的线程。例如:

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

void someFunction() { for(volatile int x = 0; ; x = x){};}

int main()
{
    std::thread t1(someFunction);
    std::thread t2(someFunction);
    std::thread t3(someFunction);
    t1.join();
    t2.join();
    t3.join();
    return 0;
}

将产生3个线程,绝对不做任何事情。如果传递给线程的函数确实返回,这就是您想要做的。

如果您希望在此之前运行任务并退出主程序,则需要以依赖于平台的方式生成一个新进程,以便它们的执行不会因程序退出而停止。

票数 1
EN

Stack Overflow用户

发布于 2012-01-18 18:27:18

在C++11中,实现是permitted to assume that this kind of loop terminates。这样您的代码就可以被优化为零。否则,许多合法和有价值的优化是不可能的,但其效果有时会令人惊讶。

票数 4
EN

Stack Overflow用户

发布于 2012-01-18 18:21:42

当主线程调用thread.join()时,程序不能停止,这意味着它将等待线程“线程”完成,然而,当它循环到无穷大时,它将调用一个永远不会完成的函数。

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

https://stackoverflow.com/questions/8915212

复制
相关文章

相似问题

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