c++ - Windows 线程 : _beginthread vs _beginthreadex vs CreateThread C++

标签 c++ c multithreading winapi

_beginthread_beginthreadxCreateThread 有什么更好的启动线程的方法?

我正在尝试确定 _beginthread_beginthreadexCreateThread 的优点/缺点。所有这些函数都返回一个新创建线程的线程句柄,我已经知道 CreateThread 在发生错误时会提供一些额外的信息(可以通过调用 GetLastError 来检查)...但是什么是在使用这些功能时我应该考虑哪些事项?

我正在使用 Windows 应用程序,因此跨平台兼容性已经不可能了。

我浏览了 msdn 文档,但我无法理解,例如,为什么有人会决定使用 _beginthread 而不是 CreateThread,反之亦然。

干杯!

更新: 好的,感谢您提供的所有信息,如果我使用 _beginthread(),我还阅读了一些无法调用 WaitForSingleObject() 的地方,但如果我在线程中调用 _endthread() 不应该工作吗?那里有什么交易?

最佳答案

CreateThread() 是一个原始的 Win32 API 调用,用于在内核级别创建另一个控制线程。

_beginthread()_beginthreadex() 是在后台调用 CreateThread() 的 C 运行时库调用。一旦 CreateThread() 返回,_beginthread/ex() 会负责额外的记账,以使 C 运行时库在新线程中可用且一致。

在 C++ 中,您几乎肯定应该使用 _beginthreadex(),除非您根本不会链接到 C 运行时库(又名 MSVCRT*.dll/.lib)。

关于c++ - Windows 线程 : _beginthread vs _beginthreadex vs CreateThread C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/331536/

相关文章:

c# - 为什么魔法锁定 System.Object 的实例允许不同于锁定特定实例类型?

c - pthread_join() 如何确定被调用/等待线程已终止

java - 带连接的保护 block

c++ - 我可以从遗留 C 回调中抛出 C++ 异常吗?

C++,嵌入式 Linux,用于视频 HDMI 输入/输出

c++ - 具有多个独立组的本地进程的 IPC 方法

c - 如何限制我的用户输入

c - 栈帧内存分配

c - 如何阻止文件名/路径出现在已编译的 C 二进制文件中

c++ - 在 MFC C++ 中更改文本颜色?