如何结束 _beginthreadex()

How to end _beginthreadex()?

本文关键字:beginthreadex 何结束 结束      更新时间:2023-10-16
在我的

桌面应用程序中,我使用 _beginthreadex(...( 创建了一个简单的线程。我想知道如果我的应用程序将被关闭(没有明确关闭线程(会发生什么?线程内的所有资源都会自动清除吗?我有疑问。所以我喜欢在我的应用程序关闭时结束线程。我想知道什么是最好的做法?使用_endthreadex只能在线程内部(!(使用,而像TerminateThread(...(这样的东西似乎不起作用(无限循环(。你有什么建议吗?

当主线程退出时,您的其他线程将被销毁。

最好让 main 等待您的其他线程,使用它们的句柄,并向他们发送一条消息(也许使用事件(以指示它们退出。然后,Main 可以向事件发出信号,并等待其他线程完成它们正在执行的操作并干净地退出。当然,这需要线程定期检查事件以查看是否需要退出。

当主线程退出时,将清理应用及其所有资源。这将包括其他线程及其资源。

另外,发布您拥有的代码 TerminateThread ,因为它有效。

最整洁的方法是向线程发送一条消息(或通过事件指示(,告知胎面应终止并允许它释放资源并退出其入口点函数。

要关闭线程,您需要使用 _beginthreadex 返回的句柄调用 CloseHandle((。

线程是进程的一部分,因此

当进程终止时,它将带走线程,操作系统将恢复对两者拥有的所有内容的所有权,因此将释放所有资源。

请记住,如果您没有预先警告线程即将结束,那么当它结束时,它可能正在某些工作中。如果它正在使用任何系统或外部资源,它们将被释放,但可能处于时髦状态(例如,文件可能被部分写入等(。

另请参阅 http://www.bogotobogo.com/cplusplus/multithreading_win32A.php

注意:使用 CloseHandle(( 仅适用于_beginthreadex,如果您使用的是_beginthread则不适用。参见 http://msdn.microsoft.com/en-us/library/kdzttdcb(v=vs.90(.aspx