多任务处理是不是在我的计划中工作的C++ 11

问题描述:

如何启动并联一个新的线程不停顿的主要功能?多任务处理是不是在我的计划中工作的C++ 11

这里是我的代码:

void someFunction { while(1);} 

int main(){ 

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

} 

但程序不停止


附:如何在并行源中运行线程

+0

'加入()'等待线程完成,并阻止您创建的线程后,它已经开始了。但是在退出或终止它之前,你应该在主线程中调用join()。 – PeterT 2012-01-18 18:22:24

这一呼吁:

thread.join(); 

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

#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个完全没有任何作用的线程。如果传递给线程的函数返回,这就是你想要做的。

如果你想有之前的任务运行和主程序退出,则需要产生新的进程在依赖于平台的方式,让自己的执行不会受到你的程序退出停止。

程序无法停止,因为主线程调用thread.join()这意味着它将等待线程“线程”完成,但是那个调用的函数永远不会完成,因为它会循环到无穷远。

thread.join();正在等待辅助线程退出,但由于二级线程执行一个无限循环,它永远不会退出。

编辑:我应该补充的是,标准给予足够的余地允许线程退出,但它不是必需的。

+0

好的,thx。什么在并行流中运行线程? – 2012-01-18 18:23:57

+0

创建线程对象('new thread(someFunction);')创建运行您指定的函数的新线程。 – 2012-01-18 18:29:54

你加入到一段时间(1)循环。当(1)结束时,程序将停止,即。决不。

+0

或立即。这是C++ 11,“一个循环......可以由实现终止。” – 2012-01-18 18:31:29

+0

@DavidSchwartz - 大概是这样的,连接会导致引用循环,导致编译器无法优化它? – 2012-01-18 19:21:30

+0

不太可能。没有理由与其他人有任何关系。如果代码终止,那要么是因为编译器没有足够的智能来优化循环,要么是足够聪明的,以便计算非终止。 (如果我正在编写一个C++ 11编译器,我不会优化出一个显然不会终止的循环,因为这是令人吃惊的行为,只有在我无法确定循环终止时才使用规则,或者不,但可以告诉它没有其他影响。) – 2012-01-18 19:50:59

在C++ 11,实现如下permitted to assume that this kind of loop terminates。所以你的代码可以被优化到什么都没有。否则,很多合法和有价值的优化是不可能的,但偶尔会产生令人惊讶的效果。