多线程:thread or process.h - C++

Multithreading: thread or process.h - C++

我开始研究多线程。而且我发现了 2 种使用它的方法 ic C++。首先是 thread

#include <thread>
...
std::thread t(function);
<< some code>> 
t.join(); //(or detach)

第二个是 process

#include <process.h>
...
_beginthreadex('bunch of parameters');
<< some code >>
_endthreadex()

那么,有什么区别呢?如果有区别,什么时候应该用一个代替另一个?

坚持使用 C++ 中的第一种标准方法来创建线程,即使用 std::thread。

第二个是微软特有的。我怀疑现在有人会使用它。 看到这个:https://www.quora.com/When-do-we-write-include-process-h/answer/Sergey-Zubkov-1

您错过了一个:CreateThread(),它也是 Microsoft (WinAPI) 特有的,在许多 Windows 程序中都可以找到。

what, if anything, is the difference?

_beginthreadexCreateThread 是非标准 Microsoft/Windows 特定函数。

_beginthread 支持在 Managed Code 中启动线程,这在混合环境中可能很有用。

CreateThread 是创建线程的本机 WinAPI 调用。这是 经典 Windows 程序中的调用。通过此调用编辑的线程句柄 return 使您能够以不同的方式控制线程,例如,通过调用 SetThreadPriority()

使用 <thread> 是自 C++11 以来执行线程的标准方法。它拥有您将永远需要的大部分功能——但缺少一些特定于平台的线程处理支持。然而,由标准库创建的线程可以 return 本机线程句柄以通过使用带有该句柄的平台特定调用来启用优先级等。

if there is a difference, when should one be used instead of the other?

由于您正在学习线程而不是在旧代码中挖掘,因此您绝对应该选择 <thread>。可能需要很长时间,您才会觉得有必要以平台特定的方式对线程使用 fiddle 的本机调用 - 如果您这样做,您仍然可以获得本机句柄。

使用 <thread> 还可以使您的程序具有可移植性。在 Posix 环境中,线程通常由 Posix 线程完成(具有与 Windows API 完全不同的 API),但是通过创建代码使用纯 <thread> 调用使移植程序不是问题。它只是工作。