请教微软专家:ATL项目中用CreateThread好,还是_beginthreadex好?

horris 2003-08-09 02:32:46
MSDN里关于Win32 API CreateThread的文档说,用到C运行时库的程序最好用C库函数beginethread代替CreateThread来产生线程,用endthread代替ExitThread结束线程,否则会造成小的内存遗漏。
在ATL项目里,一般地都有宏_ATL_MIN_CRT起作用,这保证编译时连接最小的C运行时库,不知这里使用CreateThread安全否?
能否深入讲讲连接C运行时库为什么会使调用CreateThread产生线程造成内存遗漏?
...全文
294 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
horris 2003-08-22
  • 打赏
  • 举报
回复
看来我只好结贴了, 谢谢arxing和firingme的参与.
horris 2003-08-20
  • 打赏
  • 举报
回复
我认为用VC的CRT,可能_beginthreadex和CreateThread是一样的,MS不至于和自己找别扭。但是第三方CRT就难说了。
微软专家们这么忙呀?
arxing 2003-08-18
  • 打赏
  • 举报
回复
我曾经以为_endthreadex()通过crt会调用当前线程堆栈的所有对象的析构函数,但是通过跟踪发现,我的想法错了。因此_endthreadex()与ExitThread()一样,只是简单地把堆栈指针退到线程堆栈的顶部。所以我才说它们的差别仅仅是一个默认可以处理异常,一个没有。如果添加处理异常的代码,CreateThread()/ExitThread()跟_beginthreadex()/_endthredex()完全一样的作用。
horris 2003-08-17
  • 打赏
  • 举报
回复
我看在MFC上开发最好是用__beginthreadex,因为MFC的源代码就是用的它而不是CreateThread. 我想肯定是有原因的. 我现在最关心的是在ATL工程中, 在_ATL_MIN_CRT宏定义的情况下, 用CreateThread是否安全.
firingme 2003-08-10
  • 打赏
  • 举报
回复
Jeff的《Windows核心编程》一书中对这两个创建线程的函数有分析,_beginthreadex的确比CreateThread靠得住。具体的分析我就不重复了
arxing 2003-08-10
  • 打赏
  • 举报
回复
从功能上没啥差别,唯一差别就是crt thread有个异常处理,当线程出现异常时,如果用户没有处理,它也能安全释放线程。
arxing 2003-08-09
  • 打赏
  • 举报
回复
msdn上说CreateThread比_beginthreadex产生更多的内存泄漏,但是我看threadex.c文件的实现代码,并没有什么措施以避免内存泄漏,也许msdn说的可能是假的。不过采用crt总是有用的,因为好移植。
另外,<atlbase.h>还提供了两个模板函数
template <typename T>
HANDLE CreateThreadT(LPSECURITY_ATTRIBUTES lpsa, DWORD dwStackSize, DWORD (WINAPI * pfn)(T *pparam), T *pparam, DWORD dwCreationFlags, LPDWORD pdw);
template <typename T>
HANDLE AtlCreateThread(DWORD (WINAPI* pfn)(T *pparam), T *pparam);
没有任何官方文档可以说明它们,但是VC6.0,VC7.0,VC7.1都有这两个函数,可以放心使用。它们可以针对不同的编译开关自动选择使用crt,或者直接使用API。

内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧