Tho*_*ini 3 c++ winapi multithreading
我读的文档约_beginthreadex和_endthreadex,但也有几件事情我不明白.
请注意,文档同时记录"扩展"和正常功能,但我没有使用_beginthread和_endthread; 只有他们的扩展版本.
您可以显式调用_endthread或_endthreadex来终止线程; 但是,当线程从作为参数传递的例程返回时,会自动调用_endthread或_endthreadex.通过调用endthread或_endthreadex来终止线程有助于确保为线程分配的资源得到适当恢复.
_endthreadex被自动调用,为什么调用它有助于确保"适当的资源恢复"?不论我是否打电话都不应该有任何区别,或者是这样吗?_endthread会自动关闭线程句柄(而_endthreadex则不会).因此,在使用_beginthread和_endthread时,不要通过调用Win32 CloseHandle API显式关闭线程句柄.
_endthreadex 不关闭手柄,为什么我不应该关闭它CloseHandle?我的所有线程只是通过从主函数返回而自动终止,并且从不强行终止.根据文档,当发生这种情况时会_endthreadex自动调用.
这虽然不会关闭手柄.假设我确实需要关闭它,尽管如上所述,我怎么能这样做,因为此时线程已经死了?我应该以某种方式从另一个线程关闭它吗?如果我把它打开怎么办?
如果自动调用_endthreadex,那么调用它有助于确保"正确恢复资源"?不论我是否打电话都不应该有任何区别,或者是这样吗?
我认为它们意味着当你不使用标准方式终止你的线程时的情况.
如果_endthreadex没有关闭句柄,为什么我不应该用CloseHandle关闭它?
您应该CloseHandle在使用时关闭它_endthreadex.文档说只_endthread关闭句柄(因此CloseHandle调用是多余的).
我的所有线程只是通过从主函数返回而自动终止,并且从不强行终止.根据文档,当发生这种情况时_endthreadex会自动调用.
从启动它的线程关闭线程句柄是一种常用的解决方案.您应该记住句柄并在适当的位置等待线程完成(使用WaitForSingleObject)然后关闭其句柄.如果不这样做,将导致资源泄漏.如果你有一些线程,这通常不是一个大问题,但这绝对不是一个好习惯.
| 归档时间: |
|
| 查看次数: |
1439 次 |
| 最近记录: |