我正在创建一个这样的线程:
MyThread = new boost::thread(&MyThreadFunction, this);
MyThreadFunction 是:
void MyThreadFunction()
{
for(int i=0;i<10000;i++)
{
Sleep(1000);
boost::this_thread::interruption_point();
cout<< "Test"<<i<<endl;
}
}
如您所见,线程在一段时间后(或被中断时)出现问题。因此,当我需要运行 MyThreadFunction 时,我需要创建一个新线程。
我需要删除线程吗?
如何检查线程是否仍在运行,以便在运行时无法删除它?
最佳答案
您需要回答的第一个问题是“线程的生命周期是什么?”
线程的生命周期是否受某些更高级别函数的限制?如果是这样,则需要确定加入子线程的策略。加入线程后,您可以(并且必须)安全地删除动态分配的线程。如果您不删除该线程,您将拥有与 boost::thread 对象本身相关的所有常见内存丢失(而不是由于未加入底层 Posix/Windows/等线程而导致的资源丢失)
如果线程的生命周期不受更高级别函数的限制,只需创建线程并对其调用分离。此时“boost::thread 对象不再代表现在分离的线程”(参见引用资料),您可以安全地删除 boost::thread 对象。无需跟踪或捕获 boost::thread 指针。底层 OS 线程资源将在程序终止时被清理。
当然,在大多数情况下,一开始就不需要动态分配 boost::thread 对象。如果您需要控制生命周期并稍后加入它们,最好有一个类来维护线程的所有权并将其视为类成员。
关于c++ - 我是否需要删除我创建的 boost 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24761101/