C++ 在_beginthreadex()成功后,是否可以立即调用CloseHandle()?

C++ 在_beginthreadex()成功后,是否可以立即调用CloseHandle()?,c++,windows,multithreading,visual-c++,beginthreadex,C++,Windows,Multithreading,Visual C++,Beginthreadex,我对使用从\u beginthreadex()返回的句柄不感兴趣。立即对其调用CloseHandle()安全吗 我认为必须这样做以避免内存泄漏。是的,只要您决定不再需要该句柄,就可以关闭该句柄。这不会影响线程执行。但是,在继续之前,您可能应该检查线程是否已经启动 您关心的泄漏不是内存泄漏,而是系统资源泄漏-通常情况下更严重。根据MSDN,您不应该关闭u beginThreadEx返回的句柄: _endthread会自动关闭线程句柄(而_endthreadex不会)。因此,在使用_beginthr

我对使用从
\u beginthreadex()
返回的句柄不感兴趣。立即对其调用
CloseHandle()
安全吗


我认为必须这样做以避免内存泄漏。

是的,只要您决定不再需要该句柄,就可以关闭该句柄。这不会影响线程执行。但是,在继续之前,您可能应该检查线程是否已经启动


您关心的泄漏不是内存泄漏,而是系统资源泄漏-通常情况下更严重。

根据MSDN,您不应该关闭u beginThreadEx返回的句柄: _endthread会自动关闭线程句柄(而_endthreadex不会)。因此,在使用_beginthread和_endthread时,不要通过调用Win32 CloseHandle API显式关闭线程句柄。
(详情请参见。)

该部分介绍了不同的功能。“在使用_beginthread和_endthread时,不要显式关闭线程句柄`vs.。_beginthreadex返回的句柄必须由_beginthreadex的调用方关闭。您需要最终关闭句柄以避免资源泄漏,但在启动线程后立即关闭该句柄将使您无法进行同步(等待)用于使用句柄完成线程。是的,这是安全的。即使您立即关闭由_beginthreadex返回的句柄,仍然有另一种方法与线程同步。线程本身可以通过GetCurrentThreadId访问其线程id并将其传递给主线程。然后您可以始终调用OpenThread(具有同步权限)从该线程id获取新句柄。谢谢。确定新创建的线程是否已实际启动的最佳方法是什么?@user1061590:没有“最佳”方法,但我认为您应该检查
\u beginthreadex()
返回的值以确保它成功。