多线程:线程或进程.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。
第二个是Microsoft具体的。我怀疑现在有人会使用它。 看到这个: https://www.quora.com/When-do-we-write-include-process-h/answer/Sergey-Zubkov-1
你错过了一个:CreateThread((,它也Microsoft(WinAPI(特定,可以在许多Windows程序中找到。
有什么区别,如果有的话?
_beginthreadex
和CreateThread
是非标准的Microsoft/Windows特定功能。
_beginthread
支持在托管代码中启动线程,这在混合环境中可能很有用。
CreateThread
是用于创建线程的本机 WinAPI 调用。这是您将在经典Windows程序中找到的调用。此调用返回的线程句柄使您能够以不同的方式控制线程,例如,通过调用 SetThreadPriority(( 等。
自 C++11 以来,使用<thread>
是执行线程的标准方法。它拥有您需要的大部分内容 - 但缺乏一些特定于平台的处理线程的支持。但是,由标准库创建的线程可以通过使用该句柄的平台特定调用来返回本机线程句柄以启用优先级等。
如果存在差异,何时应使用一个而不是另一个?
由于您正在学习线程并且没有在旧代码中挖掘,因此您绝对应该使用<thread>
.可能需要很长时间才能感觉到需要使用本机调用以特定于平台的方式摆弄线程 - 如果您这样做,您仍然可以获得本机句柄。
使用<thread>
还可以使程序可移植。在 Posix 环境中,线程通常由 Posix 线程(使用与 Windows API 完全不同的 API(完成,但通过创建使用纯<thread>
调用的代码,您可以移植程序不再是问题。它只是工作。
- boost::进程间消息队列引发错误
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 是否可以通过C++扩展强制多个python进程共享同一内存
- IPC使用多个管道和分支进程来运行Python程序
- 异常属于C++中的线程还是进程
- WMI检测进程创建事件-c++
- c++多进程编写一个唯一的文件
- 如何在C++中将函数发送到另一个进程
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 终止 QProcess 不会终止子进程
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- Windows 进程间同步类似事件?
- 在挂钩启动新线程时解除挂钩进程
- pclose() 不会给我进程退出代码
- 运行代码时,c++ 会终止进程
- 可以读入进程内存的最大块大小是多少?
- 枚举进程模块在有效句柄上返回无效句柄
- 如何读取特定地址的进程内存?
- 如何从另一个进程解开全局钩子?