您错过了一个:CreateThread(),它也是 Microsoft (WinAPI) 特有的,在许多 Windows 程序中都可以找到。
如果有的话,有什么区别?
_beginthreadex
并且CreateThread
是非标准的 Microsoft/Windows 特定功能。
_beginthread
支持在托管代码中启动线程,这在混合环境中可能很有用。
CreateThread
是用于创建线程的本机 WinAPI 调用。这是您可以在经典 Windows 程序中找到的调用。此调用返回的线程句柄使您能够以不同的方式控制线程,例如,通过调用SetThreadPriority()等。
Using<thread>
是自 C++11 以来执行线程的标准方法。它拥有您所需要的大部分功能 - 但缺乏一些特定于平台的支持来处理线程。然而,标准库创建的线程可以返回本地线程句柄以启用优先级等,方法是使用具有该句柄的平台特定调用。
如果有区别,什么时候应该使用一个而不是另一个?
由于您正在学习线程并且没有在旧代码中挖掘,因此您绝对应该使用<thread>
. 在您觉得需要使用本机调用以特定于平台的方式处理线程之前可能需要很长时间 - 如果您这样做了,您仍然可以获得本机句柄。
使用<thread>
还可以使您的程序可移植。在 Posix 环境中,线程通常由 Posix Threads 完成(使用与 Windows API 完全不同的 API),但是通过创建使用纯<thread>
调用的代码,您可以使移植程序成为问题。它只是工作。