如何使boost线程自我销毁?(C++)

4

我有一个类,其中包含一些函数:

void workerFunc(int ClassVariable)  
{  
    boost::posix_time::seconds workTime(classVariableA);  

    std::cout << "Worker: running" << std::endl;  

    // Pretend to do something useful...  
    boost::this_thread::sleep(workTime);  


    std::cout << ClassVariable << std::endl;  
    std::cout << "Worker: finished" << std::endl;  
}  

我希望你能将这些内容放进线程中,还有其他一些函数需要按照以下方式工作

while(1)
{
 boost::thread workerThread(workerFunc(ClassVariableB));  
}

因此,它每次都会创建一个线程。但是我需要的是当线程完成时自动销毁。如何做到这一点?

2个回答

5

您不需要做任何事情。您只需确保线程真正完成(即没有无限循环或类似问题)。


好的 - 我喜欢这个听起来的感觉。但是如果那是真的,那么thread.join用于什么? - Rella
3
有时候线程会出现无限循环的情况(例如监听传入的网络流量),这种情况下你需要向该线程发送一个信号来使其停止,然后与该线程连接以确保它真正停止。另一种情况是当线程为您执行某个任务时,只有在该任务完成后才能继续进行。 - Björn Pollex

2

当线程完成创建时,它将自动结束运行所创建的函数。

join是一个奇怪的词,它实际上意味着等待,也就是等待线程执行完毕。

如果要保留线程以供重用,通常会通过使其函数循环来实现,每次达到“等待”状态时,它会在发生等待的事件时被警报(唤醒)。最终,这将是终止请求或导致线程终止的请求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接