CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

开始一个新线程为什么要用_beginThreadex()?而不用AfxBeginThread(),区别何在?

楼主sdcer777(独钓雪)2003-11-01 19:33:27 在 VC/MFC / 网络编程 提问

看到下面这段代码,是个宏,为什么不用AfxBeginThread()代替宏中的那个开始线呈的函数:_beginthreadex()??  
  #define   BeginThread(pfnStartAddr,pvParam,pdwThreadID)\  
  ((HANDLE)(_beginthreadex((void*)NULL,\  
                                                                    0,\  
    (PTHREAD_START)(pfnStartAddr),\  
    (void*)(pvParam),\  
    0,\  
    (unsigned*)(pdwThreadID)\  
  )\  
                                    )\  
  ) 问题点数:60、回复次数:5Top

1 楼huanyun(无妻徒刑)回复于 2003-11-01 20:51:54 得分 15

AfxBeginThread()是MFC的线程函数  
  _beginthreadex()是C库函数  
  AfxBeginThread()有MFC提供的一些方便的控制   安全性较_beginthreadex()高  
  但系统开销比_beginthreadex()大Top

2 楼vcforever(累)回复于 2003-11-01 21:14:55 得分 30

 
  1、不要在一个MFC程序中使用_beginthreadex()或CreateThread()。  
  这句话的意思是由于AfxBeginThread()是MFC封装的启动线程的函数,里面包含了很多和MFC相关的启动信息,而且封装了一些常用的操作,使用起来也比较简便。而用另外两个函数就需要程序员对类型,安全性检查进行更多的思考!  
  2、用_beginthreadex()函数应该是最佳选择,因为_beginthreadex()函数是C   Run-time   Library   中的函数,函数的参数和数据类型都是C   Run-time   Library中的类型,这样在启动线程时就不需要进行Windows数据类型和C   Run-time   Library中的数据类型之间的转化。减低了线程启动时的资源消耗和时间的消耗!  
  3、在C++程序中,几乎都要用到new和delete,难道只有使用_beginthreadex()?  
  不,因为MFC也是C++类库(只不过是Microsoft的C++类库,不是标准的C++类库),在MFC中也封装了new和delete两中运算符,所以用到new和delete的地方不一定非要使用_beginthreadex()   函数,用其他两个函数都可以!  
   
  其实在程序中使用上面的哪个函数并不是绝对的,书的作者只不过是提了一个更佳的搭配方法,我在  
  MFC程序中也经常使用_beginthreadex()和CreateThread()这两个函数,运行的效果也没有多大的区别,有的时候只是需要你额外的进行一些类型检查和其他的一些转化操作,其余没有其他不妥!  
  上面是俺的一些理解,和在工作中的一点感觉!  
   
  希望对你有所帮助!  
   
   
  Top

3 楼cmsbai(小白)回复于 2003-11-01 21:22:59 得分 0

同感Top

4 楼reviver(reviver)回复于 2003-11-02 22:00:45 得分 15

补充一点,_beginthreadex()是针对CRT的线程函数,在线程中若要用到CRT的函数,最好用这个启动线程,如果不用这个会有内存泄漏。Top

5 楼chenqsbeast(斗战圣佛)回复于 2003-11-03 16:55:30 得分 0

有道理Top

相关问题

  • AfxBeginThread(..)创建的线程 如何在关闭程序前杀死它?
  • 如何在一个用户界面线程里用AfxBeginThread创建的工作者线程中发送消息给其他窗口类?急、急、急...
  • 如何在 VB 中使用多线程?
  • 如何在PB中实现多线程!
  • 如何在子线程中调用SocketConnection.AppServer?
  • 如何在dos/win3.1下实现多线程??
  • 如何在pb中实现多线程
  • 如何在DLL中创建线程?
  • 如何在gdb调试多线程?
  • 如何在c#中得到线程id!

关键词

  • c++
  • 函数
  • 线程
  • mfc
  • 数据
  • beginthreadex
  • afxbeginthread
  • 封装
  • 类型
  • 启动

得分解答快速导航

  • 帖主:sdcer777
  • huanyun
  • vcforever
  • reviver

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo