_beginthreadex 与 createthread 的区别

小华半导体HC32芯片开发使用说明 HC32F/L系列MCU在Keil MDK和IAR Workbench环境下通过工程样例进行软件开发。 阅读详情

_beginthreadex : CRT提供的库函数

createthread:windows 提供的API 

实现的功能都是创建一个线程,线程的入口函数有少许不一致。


内部实现细节也是有差异的:

CreateThread、_beginthread和_beginthreadex都是用来启动线程的,但大家看到oldworm没有提供_beginthread的方式,原因简单,_beginthread是_beginthreadex的功能子集,虽然_beginthread内部是调用_beginthreadex但他屏蔽了象安全特性这样的功能,所以_beginthread与CreateThread不是同等级别,_beginthreadex和CreateThread在功能上完全可替代,我们就来比较一下_beginthreadex与CreateThread!

CRT的函数库在线程出现之前就已经存在,所以原有的CRT不能真正支持线程,这导致我们在编程的时候有了CRT库的选择,在MSDN中查阅CRT的函数时都有:
Libraries
LIBC.LIB Single thread static library, retail version 
LIBCMT.LIB Multithread static library, retail version 
MSVCRT.LIB Import library for MSVCRT.DLL, retail version 
这样的提示!
对于线程的支持是后来的事!
这也导致了许多CRT的函数在多线程的情况下必须有特殊的支持,不能简单的使用CreateThread就OK。
大多的CRT函数都可以在CreateThread线程中使用,看资料说只有signal()函数不可以,会导致进程终止!但可以用并不是说没有问题!

有些CRT的函数象malloc(), fopen(), _open(), strtok(), ctime(), 或localtime()等函数需要专门的线程局部存储的数据块,这个数据块通常需要在创建线程的时候就建立,如果使用CreateThread,这个数据块就没有建立,然后会怎样呢?在这样的线程中还是可以使用这些函数而且没有出错,实际上函数发现这个数据块的指针为空时,会自己建立一个,然后将其与线程联系在一起,这意味着如果你用CreateThread来创建线程,然后使用这样的函数,会有一块内存在不知不觉中创建,遗憾的是,这些函数并不将其删除,而CreateThread和ExitThread也无法知道这件事,于是就会有Memory Leak,在线程频繁启动的软件中(比如某些服务器软件),迟早会让系统的内存资源耗尽!

_beginthreadex(内部也调用CreateThread)和_endthreadex就对这个内存块做了处理,所以没有问题!(不会有人故意用CreateThread创建然后用_endthreadex终止吧,而且线程的终止最好不要显式的调用终止函数,自然退出最好!)

谈到Handle的问题,_beginthread的对应函数_endthread自动的调用了CloseHandle,而_beginthreadex的对应函数_endthreadex则没有,所以CloseHandle无论如何都是要调用的不过_endthread可以帮你执行自己不必写,其他两种就需要自己写!(Jeffrey Richter强烈推荐尽量不用显式的终止函数,用自然退出的方式,自然退出当然就一定要自己写CloseHandle)

本地部署开源视频会议解决方案 Jitsi Meet 并实现外网访问 Jitsi Meet 是一款基于 WebRTC 技术的开源视频会议解决方案,它允许用户通过互联网进行高质量的视频通话、语音通话和文本聊天,非常适合用于在线教育、远程办公、团队协作等场景。本文将详细介绍如何利用 Docker 在本地部署 Jitsi Meet 并结合路由侠实现外网访问本地部署的 Jitsi Meet。 阅读详情

相关推荐

基于YOLOv8的玉米病害监测系统

本研究的主要目标是设计并实现一个基于深度学习的玉米病害识别系统,通过采用YOLOv8算法进行玉米叶片病害的自动化识别。研究首先对玉米病害的种类和特点进行了分析,选择了具有代表性的病害类型,如玉米锈病、灰叶斑病、枯叶病和健康叶片,以构建一个多类别的分类问题。数据集的构建和处理是研究的关键部分,通过数据增强、图像标注等手段确保了数据的多样性和丰富性,从而提高了模型的泛化能力。

yupan__的博客 496

windows线程之CreateThread与_beginthreadex区别详解

lpThreadAttributes :线程安全属性,一般设置为NULLdwStackSizeL :指定线程可以为其线程栈使用多少地址空间。一般传入0,由编译器自行去分配。lpStartAddress:线程函数地址lpParameter:传递给线程函数的参数dwCreationFlags:控制线程创建。如果值为0,线程创建后立即就进行调度。值为CREATE_SUSPENDED,系统将创建并初始化线程,但是会暂停该线程运行,这样它就无法进行调度。一般我们传入0。......

new9232的博客 2295

OV5640调试大坑,关于binning、RES分辨率与EV曝光

OV5640在使用binning模式时,必须考虑使用场景,分辨率下降叠加动态范围压缩,会使目标对象细节在高光环境下大量丢失,2x2的binning模式,分辨率会远低于感光面积的1/4。

chongyun_的专栏 1824

(P102)多线程三:_beginthreadex,CreateThread与_beginthreadex区别,线程类封装

文章目录 F1查看帮助 为啥_beginthreadex()比CreateThread()好呢? (1)_beginthreadex是多线程版的C runtime library中的一个函数; _beginthreadex包裹了CreateThread; C runtime library是分为单线程版本的runtime library和多线程版本的runtime library (2)malloc free fopen strtok等等这些C runtime library函数都不是线程安全的。

喜欢打篮球的普通人 1199

Clang Static Analyzer 使用教程:本地 + CMake + GitHub Actions 自动静态分析实战

本文介绍了ClangStaticAnalyzer静态代码分析工具的使用方法。该工具基于Clang/LLVM,可检测C/C++代码中的内存泄漏、空指针等常见错误。主要内容包括:安装指南(Ubuntu/macOS/Windows)、命令行使用方法、CMake项目集成方案、GitHub Actions自动化分析配置,以及HTML报告生成与查看。文章还提供了官方资源链接,帮助开发者系统掌握从本地调试到持续集成的完整静态分析工作流,提升代码质量保障能力。适用于需要在开发过程中实施静态分析的C/C++项目。

u014358031的博客 2158

信号完整性分析学习--16--传输线效应

传输线效应 说到传输线效应,大多数人都会想到一个经验法则,那就是: “当互连线的长度大于1/6倍的信号上升时间的空间延伸时,互连线就体现出传输线效应。” 上升时间越小越容易体现传输线效应。 由此可见,同一根互连线,它是否体现传输线效应,要看它要传输什么样的信号。下图所示,一根延时为15ps的互连线,当它传输上升时间为60ps的信号时就会体现传输线效应;当它传输上升时间为180ps的信号时就不体现传输线效应。

qq_29476769的博客 7277

CreateThread与_beginthreadex本质区别

点击打开原文链接 一、预热: 下面这个程序的主线程会创建了一个子线程并等待其运行完毕,子线程就输出它的线程ID号然后输出一句经典名言——Hello World。整个程序的代码非常简短,只有区区几行。 //最简单的创建多线程实例 #include <stdio.h> #include <windows.h> //子线程函数 DWORD WINAPI ThreadFun...

mpp_king的博客 415

检索生成(RAG) vs 长文本大模型:实际应用中如何选择?

大模型的上下文理解能力直接影响到 LLMs 在复杂任务和长对话中的表现。本期内容聚焦于两种主流技术:长上下文(Large Context Windows)和检索增强生成(RAG)。这两种技术各有何优势?在实际应用中,我们又该如何权衡选择?文章不仅详细阐述了这两种技术的工作原理,还深入分析了它们在效率、准确性和实施成本等方面的差异。文章特别提到了在执行重复性任务时使用 Context Caching 优化长上下文的优势,然而,缓存策略的效果很大程度上取决于提示词的可预测性。

2401_85782938的博客 1255

_beginthreadex和CreateThread

在多线程环境中会出问题的C/C++运行库变量和函数有errno,_doserrno,strtok,_wcstok, strerror,_strerror,tmpnam,tmpfile,asctime,_wasctime,gmtime,_ecvt和_fcvt等等。 为了保证C和C++多线程应用程序正常运行,必须创建一个数据结构,并使之与使用了C/C++运 行库函数的每个线程关联。然后,在

u011261959的专栏 812

VS2010“未能正确加载包”问题解决方法小汇

本文按照由简至繁的顺序详述了借助网络获知的四种解法,主要面向重装 VS2010 后遭遇题述问题的网友,相关包尤指 VSTS、RadLangSvc、Language、Bootstrap 及 MicrosoftDataEntityDesign。

虚有其表的博客 1万+

Claude Code Agents 进阶:多代理协作与任务委托

Agent 是一个独立运行的 Claude 实例,它有自己的上下文和任务焦点。│ 主 Claude ││ (协调者) ││ │ │▼ ▼ ▼│ 代码审查 │ │ 测试生成 │ │ 文档编写 ││ │ ││▼汇总结果,完成任务并行处理:多个 Agent 同时工作,提高效率任务隔离:每个 Agent 有独立的上下文专业分工:不同类型的 Agent 擅长不同任务灵活控制:可以指定运行模式、超时等参数。

gaoxiang_120的专栏 336

_beginthreadex CreateThread _beginthread

>中有很详细地介绍。  _beginthreadex是微软的C/C++运行时库函数,CreateThread是操作系统的函数。 _beginthreadex通过调用CreateThread来实现的,但比CreateThread多做了许多工作。 注意:若要创建一个新线程,绝对不要使用CreateThread,而应使用_beginthreadex. 因为:考虑标准C运行时库的一些变量和函数,如

路在脚下 618

【机器学习概率统计】11 贝叶斯统计推断:最大后验

这一节,我们来介绍另外一种统计推断方法:贝叶斯统计推断方法。 1.回顾贝叶斯定理 首先,我们先来复习一下贝叶斯定理: p(Θ∣X)=p(X∣Θ)p(Θ)p(X)p(\Theta|X)=\frac{p(X|\Theta)p(\Theta)}{p(X)}p(Θ∣X)=p(X)p(X∣Θ)p(Θ)​ 在这个简简单单的式子当中,蕴含了我们要掌握的很多重要内容: 贝叶斯定理当中的四个概率表达式,他们都非常重要,在这一节的内容中将反复出现,我们来一一解析一下: p(Θ)p(\Theta)p(Θ):先验分布。 反映的是在

机器学习数学基础系列专栏 3271

关于CreateThread和_beginthreadex的区别与联系

 1.简单来说CreateThread是Windows下用于创建线程的系统API,_beginthreadex则是Visual C++运行时库函数 2._beginthreadex会在内存堆上分配一个与线程相关的数据块,而CreateThread不会分配该数据块 3.如果调用strtok、strerror、gmtime等等,会分配线程相关的数据块。当线程退出时,用_beginthread

ityezi_admin的专栏 609

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

[转载]关于_beginthreadex和CreateThread的区别

关于_beginthreadex和CreateThread的区别 在 Win32 API 中,创建线程的基本函数是 CreateThread,而 _beginthread(ex) 是 C++ 运行库的函数。为什么要有两个呢?因为C++ 运行库里面有一些函数使用了全局 量,如果使用 CreateThread 的情况下使用这些C++ 运行库的函数,就会出现不安全 的问题。而 _beginthreadex 为这些全局变量做了处理,使得每个线程都有一份独立 的“全局”量。 所以,如果你的编程只调用 Win

明月清风 精进不止 231

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

CreateThread 和_beginthreadex区别

本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beginthreadex到底有什么区别,在实际的编程中到底应该使用CreateThread还是_beginthreadex?      使用多线程其实是非常容易的,下面这个程序的主线程会创建了

Keep Moving~ 946

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

_beginthreadex,CreateThread,AfxBeginThread的区别

在 Win32 API 中,创建线程的基本函数是 CreateThread,而 _beginthread(ex) 是C++ 运行库的函数。为什么要有两个呢?因为C++ 运行库里面有一些函数使用了全局量,如果使用 CreateThread 的情况下使用这些C++ 运行库的函数,就会出现不安全的问题。而 _beginthreadex 为这些全局变量做了处理,使得每个线程都有一份独立的“全局”量。所以,

六石 791

beginthread beginthreadex CreateThread 区别

建立一个线程。unsigned long beginthread(void(cdecl *startaddress)(void*),unsigned stacksize, void *arglist);unsigne dlong beginthreadex(void *security,unsignedstacksize,unsigned(stdcall *startaddress) (void

枯藤老树昏鸦,小桥流水人家 867

CreateThread与_beginthreadex的本质区别

CreateThread函数原型:HANDLEWINAPICreateThread( LPSECURITY_ATTRIBUTESlpThreadAttributes, SIZE_TdwStackSize, LPTHREAD_START_ROUTINElpStartAddress, LPVOIDlpParameter, DWORDdwCreationFlags, ...

KnightOnHorse的博客 228

CreateThread, AfxBeginThread,_beginthread, _beginthreadex的区别

一、转载自: http://www.cnblogs.com/chuncn/archive/2009/03/08/1406096.htmlCreateThread是Windows的API函数(SDK函数的标准形式,直截了当的创建方式,任何场合都可以使用),提供操作系统级别的创建线程的操作,且仅限于工作者线程。不调用MFC和RTL的函数时,可以用CreateThread,其它情况不要轻易。在使

miyunhong的专栏 2343

_beginthreadex()与CreateThread()函数的区别

CreateThread()函数是Windows提供的API接口,在C/C++语言另有一个创建线程的函数_beginthreadex(),在很多书上(包括《Windows核心编程》)提到过尽量使用_beginthreadex()来代替使用CreateThread(),这是为什么了?下面就来探索与发现它们的区别吧。          首先要从标准C运行库与多线程的矛盾说起,标准C运行库在

EffortForever 969

关于_beginthreadex和CreateThread的区别

在 Win32 API 中,创建线程的基本函数是 CreateThread,而 _beginthread(ex) 是C++ 运行库的函数。为什么要有两个呢?因为C++ 运行库里面有一些函数使用了全局量,如果使用 CreateThread 的情况下使用这些C++ 运行库的函数,就会出现不安全的问题。而 _beginthreadex 为这些全局变量做了处理,使得每个线程都有一份独立的“全局”量。所以,如果你的编程只调用 Win32 API/SDK ,就放心用 CreateThread;如果要用到C++ 运行时间

SomeTimes 913

_beginthreadex和CreateThread的区别和联系

今天无聊, 点了一下优快云首页右下角的一周技术文章点击Top9, 基本都是intel博客大赛的文章, 其中有一篇: Win32 多线程的创建方法和基本使用, 其中提到了CreateThread内存泄露的问题, 详见: http://wenku.baidu.com/view/adede4ec4afe04a1b071dea4.html或http://dl.dbank.com/c03ljl2i

shines77 的博客 9411

_beginThreadex 与 CreateThread 的区别

///本文用于学习记录 在 Win32 API 中,创建线程的基本函数是 CreateThread,而 _beginthread(ex) 是 C++ 运行库的函数。为什么要有两个呢?因为C++ 运行库里面有一些函数使用了全局 量,如果使用 CreateThread 的情况下使用这些C++ 运行库的函数,就会出现不安全 的问题。而 _beginthreadex 为这些全局变量

u011833307的专栏 481

总结CreateThread与_beginthreadex的区别

一  为什么不直接使用CreateThread而要使用运行库函数_beginthreadex函数二  _beginthreadex函数都干了啥三  _threadstartex函数做了什么工作四  为什么不应该调用ExitThread函数五  不应该使用_beginthread_endthread函数不带ex的两个旧函数对一1中例外的说明 看了MoreWindows同学的文章《秒杀多线程

超然于物外 烟火于一瞬 2357
上一篇: How to use ppt to make an effective presentation
下一篇: windows 获取操作系统版本信息
wcppcw
博客等级 码龄18年 1粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值