如何结束 _beginthreadex()
How to end _beginthreadex()?
桌面应用程序中,我使用 _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
- 函数何时会在c++中包含stack_Unwind_Resume调用
- Python中的for循环与C++有何不同
- 在C++中释放内存期间,迭代器与指针有何不同
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 为什么 beginthreadex 线程参数变量在父线程中没有更新
- 类中的 C++ int 被设置为值,似乎不知从何而来
- -fvisibility-inline-hidden 与 gcc 中的 -fvisibility=hidden 有何不同
- 收益率和回报有何不同?
- 覆盖私有功能,它与受保护功能有何不同?
- 擦除删除成语的性能增益从何而来
- 无论代码长度如何,以下代码的内存要求有何不同?
- "virtual"对C++析构函数有何影响?
- 如果我对"while"块发表评论,为什么程序会死机?其中的"yield"线有何影响?
- 系统时间从何而来?
- stl::unordered_map 和 stl::vector 的销毁有何不同
- C++ 友元函数在内存位置上有何不同?
- 为什么我可以在不链接任何额外库的情况下包含 sys/*.h
- C 是否具有接口类概念,如果它在那里,那么它与Java接口类别有何不同
- std::u8string与std::string有何不同?
- 功能和变量从何而来