2010-08-27 104 views
2

我的代码的简化版本,如下所示:升压螺纹

class threadCreator 
{ 
    void threadFunction(void){ 
    // use some private data members and do something. 
    } 
    void createThread(void){ 
     boost::thread myThread(
       boost::bind(&threadCreator::threadFunction,this)); 
     myThread.detach(); 
    } 
} 

此程序等待线程完成执行,然后退出,即使我在线程中调用分离方法。如果我删除这个类,并在一个函数中创建我的线程,这似乎按预期工作。

我认为它与仍在记忆中的对象有关。不过,我是C++学习者,不确定如何解决这个问题。

+0

你目睹一些RAII的可能性最大。 当您的函数在分配到堆栈上的对象上完成时,会调用隐含的析构函数。 也,线程析构函数调用分离以及,所以我不知道调用两个分离函数的效果是什么。尝试使用new来分配你的线程 – Anycorn 2010-08-27 04:18:26

回答

2

我认为你错过了一些东西,因为程序要等待线程执行结束,你应该在这个线程对象的某个地方有一个.join()。默认行为不是等待线程执行的结束。

没有必要调用线程上的.detach(),线程将从范围末尾的对象线程中分离出来。