gpt4 book ai didi

c++ - 我是否需要删除我创建的 boost 线程?

转载 作者:行者123 更新时间:2023-11-28 06:47:09 25 4
gpt4 key购买 nike

我正在创建一个这样的线程:

 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 对象。如果您需要控制生命周期并稍后加入它们,最好有一个类来维护线程的所有权并将其视为类成员。

参见:http://www.boost.org/doc/libs/1_55_0/doc/html/thread/thread_management.html#thread.thread_management.tutorial.detach

关于c++ - 我是否需要删除我创建的 boost 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24761101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com