我正在使用 _beginthreadex
函数创建一个线程。我传入的函数地址有一个无限循环 (while(1)
) 。我有 threadid
和 threadhandle
。
我可以使用 TerminateThread(threadhandle,1);
但它很危险。
安全的方法是使用_endthreadex
终止线程,但它只能在线程内部使用,而我想从外部终止线程。
所以请建议是否有一种安全的方法可以使用 threadid
或 threadhandle
从外部安全地关闭、结束或终止线程。
最佳答案
你应该 - 字面意思 - 永远不要使用TerminateThread()。我什至不是在开玩笑。如果您从外部终止线程,其中保留的所有资源都将被泄露,内部访问的所有状态变量都将处于未确定状态等。
您的问题的解决方案可能是发信号通知您的线程自行完成。它可以通过线程安全方式(请参阅 InterlockedIncrement())、Windows 事件或类似方式更改的 volatile 变量来完成。如果您的线程有消息循环,您甚至可以通过发送消息要求它停止来实现。
关于c++ - 如何安全地关闭其中有无限循环的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29251723/