【发布时间】:2010-09-29 22:39:52
【问题描述】:
我只想创建一个线程,然后立即调用 CloseHandle 并让线程自行终止,这样我就不必在“原始”线程中进行额外的清理工作(不是清理本身很难,但这意味着我想避免大量额外的簿记)。
MSDN 说在线程上调用 CloseHandle() 不会终止线程,但我不清楚这是否意味着我真的可以这样做。
【问题讨论】:
标签: multithreading winapi
我只想创建一个线程,然后立即调用 CloseHandle 并让线程自行终止,这样我就不必在“原始”线程中进行额外的清理工作(不是清理本身很难,但这意味着我想避免大量额外的簿记)。
MSDN 说在线程上调用 CloseHandle() 不会终止线程,但我不清楚这是否意味着我真的可以这样做。
【问题讨论】:
标签: multithreading winapi
不仅合理,不这样做就是句柄泄漏。通常我会在创建线程后立即关闭它,除非我在其他地方需要它。
【讨论】:
ExitThread()(显式或隐式调用)关闭了退出线程中的线程句柄,这样只有创建线程的线程仍然需要关闭句柄(即CreateThread()create句柄数为 2)?
CreateThread 函数使引用计数+2,CloseHandle 只使引用计数-1,当线程函数完成时,系统将引用计数-1。
【讨论】: