启动线程的更好方法是_beginthread_beginthreadx还是CreateThread

我在试着确定_beginthread_beginthreadexCreateThread的优点/缺点是什么.所有这些函数都将线程句柄返回给新创建的线程,我已经知道CreateThread在出现错误时提供了一些额外信息(可以通过调用GetLastError进行判断)……但是,当我使用这些函数时,我应该考虑哪些事项呢?

我正在使用windows应用程序,所以跨平台兼容性已经是不可能的了.

例如,我已经阅读了msdn文档,我就是不明白为什么有人会决定使用_beginthread而不是CreateThread,反之亦然.

干杯

更新: 好的,谢谢你的所有信息,我也读到了一些地方,如果我使用_beginthread(),我不能调用WaitForSingleObject(),但是如果我在线程中调用_endthread(),这不是可行的吗?那是怎么回事?

推荐答案

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

_beginthread()&;_beginthreadex()是在后台调用CreateThread()的C运行时库调用.CreateThread()返回后,_beginthread/ex()负责额外的簿记工作,以使C运行时库可用&;在新线程中保持一致.

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

C++相关问答推荐

以c格式打印时间戳

字符数组,字符指针,在一种情况下工作,但在另一种情况下不工作?

使用额外的公共参数自定义printf

如何将字符串argv[]赋给C中的整型数组?

不会停在空格或换行符上的错误

为什么STM32G474RE上没有启用RCC PLL

X86/x64上的SIGSEGV,由于原始内存访问和C中的DS寄存器之间的冲突,在Linux上用TCC编译为JIT引擎

调用mProtection将堆栈上的内存设置为只读,直接导致程序SIGSEGV

Setenv在c编程中的用法?

在循环中复制与删除相同条件代码的性能

在txt文件中找到指定的字符串,并从数字中减go 相同的值

C11/C17标准允许编译器清除复合文字内存吗?

当我用scanf(&Q;%S%S%S&Q;,单词0,单词1,单词2)输入多个单词时,除了最后一个单词外,每个单词的第一个字符都丢失了

某些EAX值的不同调用方的CPUID结果不一致

基于蝶数恰好有8个除数的事实的代码

从整型转换为浮点型可能会改变其值.

与外部SPI闪存通信时是否应禁用中断?

C中2个数字的加法 - 简单的人类方法

我错误地修复了一个错误,想了解原因

如何向 execl 创建的后台程序提供输入?