多线程:线程或进程.h - C++

Multithreading: thread or process.h - C++

本文关键字:C++ 进程 线程 多线程      更新时间:2023-10-16

我开始研究多线程。我找到了 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。

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

你错过了一个:CreateThread((,它也Microsoft(WinAPI(特定,可以在许多Windows程序中找到。

有什么区别,如果有的话?

_beginthreadexCreateThread是非标准的Microsoft/Windows特定功能。

_beginthread支持在托管代码中启动线程,这在混合环境中可能很有用。

CreateThread是用于创建线程的本机 WinAPI 调用。这是您将在经典Windows程序中找到的调用。此调用返回的线程句柄使您能够以不同的方式控制线程,例如,通过调用 SetThreadPriority(( 等。

自 C++11 以来,使用<thread>是执行线程的标准方法。它拥有您需要的大部分内容 - 但缺乏一些特定于平台的处理线程的支持。但是,由标准库创建的线程可以通过使用该句柄的平台特定调用来返回本机线程句柄以启用优先级等。

如果存在差异,何时应使用一个而不是另一个?

由于您正在学习线程并且没有在旧代码中挖掘,因此您绝对应该使用<thread>.可能需要很长时间才能感觉到需要使用本机调用以特定于平台的方式摆弄线程 - 如果您这样做,您仍然可以获得本机句柄。

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