中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > 进程和线程
【线程对象与线程】
作者:darkay 时间:2001-10-09 10:09 出处:互联网 责编:chinaitpower
              摘要:【线程对象与线程】

 

【线程对象与线程】

线程从概念上讲就是一个执行的线索,原则上讲任何一段程序代码段都可以成为

一个线程,但是不同都操作系统的线程模型是不一样的,有的系统将线程作为用

户级来处理,真正的调度和资源分配单位是进程,而有的系统则将线程作为基本

的调度和资源分配单位。具体在windows这个OS上面,它的线程模型是由一个函数

入口指针和一个入口参数确定的,可以笼统的讲:在windows(95以上)系统中线

程就是一个运行着的函数。这个函数的原型生命如下:
DWORD WINAPI threadFunction(LPVOID);
创建线程的方法可以有两种:一种是使用API函数CreateThread,另一种是使用运

行库函数_beginthreadex(在process.h中声明)。两者的参数和效果是一样的,都

是给出一个函数的地址,入口参数,用于返回线程ID的指针,堆栈大小以及安全

属性(后面两个一般不特殊制定)。
下面看看线程对象是如何抽象线程的。
首先,有一个与线程对象在一起的全局函数:
DWORD WINAPI doRunWorking( LPVOID lpParm);
这个全局函数将用来创建真正的线程。
然后,从线程对象的构造函数开始,除了做必要的准备工作以外主要的工作就是

创建线程,以doRunWorking作为函数地址,以对象的this指针做参数创建线程,

并且线程的初始状态是CREATE_SUSPENDED(挂起)也就是说,线程创建之后不是

立刻就运行,一直到调用Run(它使用ResumeThread这个API从新启动线程)这个

成员函数才开始线程运行。
现在,看看运行了到线程执行了什么动作:
ThreadObject * p = (ThreadObject*)lpParm ;
if(p)
    p->Working();
可以看到它从lpParam得到线程对象的指针,然后调用成员函数Working,这样,

线程的执行控制权辗转又回到了线程对象的手中,doRunWorking这个函数仅仅起

了一个搭桥的作用。
最后,在对象对析构函数中,结束线程。
到此可以看到线程对象是对线程对一直抽象,从对象创建开始线程被创建,从调

用Run函数开始线程运行,当对象不在生存当时候,线程也就自动终止。线程要做

当实际工作在Working这个函数中。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有