我在C++中开发了一个状态设计模式,其中我有多个状态。某些状态的线程例程由pthread_create
限定。现在有这样的情况:一个状态转换到另一个状态,因此需要停止线程,并且需要通过pthread_join
清理内存。
因此,总而言之,我需要从线程例程本身停止线程。我怎样才能做到这一点呢?
或者有没有一种方法,当线程例程完成时,内存清理会自动发生?
PS:问题是,当我从线程例程进行状态转换到另一个状态时,会调用当前状态析构函数。在当前状态的析构函数中,我需要停止并连接线程。否则就会发生内存泄漏。
因此,总而言之,我需要从线程例程本身停止线程。我怎样才能做到这一点呢?
从线程底部执行的函数返回。
内存需要清理
您可以通过从另一个线程连接线程来清理线程终止后的线程。您可以通过在终止线程之前分离它来避免这样做。
附注。最好使用可移植的std::thread
(或std::jthread
)而不是系统特定的线程API。
可以添加共享代码吗?如何使用std::thread从例程本身终止线程
示例:
auto thread_fun = [] {
return; // this terminates the thread
};
std::thread t(thread_fun);
t.join(); // this waits for the thread to end, and cleans it up
问题内容: 我怀疑,当线程加入自身时会发生什么。即线程自行调用join方法。我没有任何错误。 样品: 但为什么?我应该得到任何错误吗? 问题答案: 线程连接本身的概念没有意义。 碰巧该方法使用该方法确定何时从该方法返回。在当前的实现中,它也不检查线程是否在联接自己。 换句话说,该方法仅在线程不再活动时才返回。这将具有永远等待的效果。
问题内容: 我在Java中的线程上有些挣扎,我有三个线程- 线程1,线程2和线程3。那些启动时正在执行某些任务,我想通过thread1停止这两个线程。我将thread1放在,然后停止两个线程,但是两个线程的进程仍在运行。你有什么想法吗? 问题答案: 您如何试图阻止他们??警告此方法已弃用。 而是考虑对线程1使用某种标志来与线程2和3通信,它们应该停止。实际上,您可能会使用interrupts。 下
本文向大家介绍Java 停止线程需要注意的地方,包括了Java 停止线程需要注意的地方的使用技巧和注意事项,需要的朋友参考一下 Java中停止线程的原则是什么? 在 Java 中, 最好的停止线程的方式是使用中断 interrupt, 但是这仅仅是会通知到被终止的线程 "你该停止运行了", 被终止的线程自身拥有决定权 (决定是否、以及何时停止), 这依赖于请求停止方和被停止方都遵守一种约定好的编码
我正在编写一个Android应用程序,它连接到蓝牙设备,读取设备发送的数据,将其添加到AChartEngine图形中,并在文本视图中显示数据。 我的Bluetooth代码与BluetoothChat示例代码中的线程实现非常相似(它与SDK一起提供)。我可以在LogCat中看到< code>ConnectedThread循环正在执行并因此获得新数据,但我的TextView在7行之后停止更新,图形间歇
我试图创建一个简单的pythongui(使用Tkinter),其中包含start按钮,在线程中运行while循环,以及停止while循环的stop按钮。 我对停止按钮有问题,它不会停止任何东西,一旦单击开始按钮,就会冻结GUI。 见下面的代码: 知道怎么解决这个问题吗?我肯定这是微不足道的,一定做了成千上万次,但我自己找不到解决办法。 谢谢大卫
我目前正在从一个服务运行一个线程来做一些后台工作。现在存在线程崩溃或者我想从服务中断线程的可能性。那我该怎么: 实际停止线程,(硬) 捕获异常并调用有关崩溃的服务 如果在睡眠时中断,则处理InterruptedException() 线程是否为Thread.IsInterrupted是检测线程是否停止的好方法吗? 到目前为止,我所做的工作如下: 所以一开始我运行我的线程直到它被中断。如果出现任何异