【线程对象与线程】

 

【线程对象与线程】

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

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

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

的调度和资源分配单位。具体在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这个函数中。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏

darkay

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值