如何结束_beginthreadex()?

时间:2013-10-08 16:13:51

标签: c++ multithreading visual-studio-2008

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

4 个答案:

答案 0 :(得分:1)

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

最好在你的其他线程上使用他们的句柄进行主等待,然后向他们发送一条消息(可能使用一个事件)来通知他们退出。然后Main可以发出事件信号并等待其他线程完成他们正在做的事情并干净地退出。当然,这需要线程定期检查事件以确定它们是否需要退出。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

最简单的方法是向您的线程发送一条消息(或以其他方式通过事件指示),该脚本应终止并允许其释放其资源并退出其入口点功能。

答案 3 :(得分:0)

要关闭线程,您需要使用_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