c++ - 如何安全地关闭其中有无限循环的线程

标签 c++ c multithreading winapi beginthreadex

我正在使用 _beginthreadex 函数创建一个线程。我传入的函数地址有一个无限循环 (while(1)) 。我有 threadidthreadhandle

我可以使用 TerminateThread(threadhandle,1); 但它很危险。

安全的方法是使用_endthreadex 终止线程,但它只能在线程内部使用,而我想从外部终止线程。

所以请建议是否有一种安全的方法可以使用 threadidthreadhandle 从外部安全地关闭、结束或终止线程。

最佳答案

你应该 - 字面意思 - 永远不要使用TerminateThread()我什至不是在开玩笑。如果您从外部终止线程,其中保留的所有资源都将被泄露,内部访问的所有状态变量都将处于未确定状态等。


您的问题的解决方案可能是发信号通知您的线程自行完成。它可以通过线程安全方式(请参阅 InterlockedIncrement())、Windows 事件或类似方式更改的 volatile 变量来完成。如果您的线程有消息循环,您甚至可以通过发送消息要求它停止来实现。

关于c++ - 如何安全地关闭其中有无限循环的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29251723/

相关文章:

c++ - 在 C++ 中创建类型列表组合

c++ - 分段堆栈如何工作

c - 使用偏移值从有效负载打印 sflow 数据

python - 查找 python 进程休眠的原因

c++ - YouCompleteMe,头文件

c++ - AVL树奇怪的行为

使用 memcpy 复制二维数组

c - 如何检查 char* 变量是否指向空字符串?

php - 尝试读取用 file_put_contents 和 LOCK_EX 锁定的文件的脚本是等待还是失败?

linux - 内核编程 - 互斥量