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