如何在不暂停主函数的情况下并行启动新线程?
这是我的代码:
void someFunction { while(1);}
int main(){
thead *th = new thead(&someFunction);
thead.join();
return 0;
}但是程序并没有停止
P.S.如何在并行源中运行线程
发布于 2012-01-18 18:24:17
这一呼吁:
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个线程,绝对不做任何事情。如果传递给线程的函数确实返回,这就是您想要做的。
如果您希望在此之前运行任务并退出主程序,则需要以依赖于平台的方式生成一个新进程,以便它们的执行不会因程序退出而停止。
发布于 2012-01-18 18:27:18
在C++11中,实现是permitted to assume that this kind of loop terminates。这样您的代码就可以被优化为零。否则,许多合法和有价值的优化是不可能的,但其效果有时会令人惊讶。
发布于 2012-01-18 18:21:42
当主线程调用thread.join()时,程序不能停止,这意味着它将等待线程“线程”完成,然而,当它循环到无穷大时,它将调用一个永远不会完成的函数。
https://stackoverflow.com/questions/8915212
复制相似问题