繁体   English   中英

如何结束_beginthreadex()?

[英]How to end _beginthreadex()?

在我的桌面应用程序内部,我已经使用_beginthreadex(...)创建了一个简单的线程。 我想知道如果我的应用程序将关闭(不显式关闭线程)会发生什么情况? 是否会自动清除线程内的所有资源? 我有疑问 所以我想在我的应用程序关闭时结束线程。 我不知道最好的做法是什么? 只能在线程内部(!)使用_endthreadex,并且好像TerminateThread(...)之类的东西似乎不起作用(无限循环)。 您有什么建议吗?

当main退出时,其他线程将被销毁。

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

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

另外,请发布TerminateThread的代码,因为它可以工作。

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

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

线程是进程的一部分,因此当进程终止时,它将与线程一起使用,并且操作系统将恢复对两者拥有的所有内容的所有权,因此将释放所有资源。

请记住,如果您尚未预告结束端的线程,则结束时可能处于某些工作的中间。 如果正在使用任何系统或外部资源,它们将被释放但可能处于时髦状态(例如,文件可能会被部分写入等)。

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

注意:仅对_beginthreadex使用CloseHandle(),如果正在使用_beginthread,则不适用。 参见http://msdn.microsoft.com/zh-cn/library/kdzttdcb(v=vs.90).aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM