【线程对象与线程】

原创 2001年07月05日 11:10:00

 

【线程对象与线程】

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

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

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

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

感悟:Java的多线程跟Java的类系统之间的关系

一直对Java将线程封装成对象的技术不甚了了,昨天帮一个新员工定位rosjava使用问题,一开始以为是多线程问题,但多番尝试未果后,走查代码,发现他在onClick函数里new CustomRosNo...
  • happen23
  • happen23
  • 2016年03月31日 11:17
  • 859

JAVA线程对象管理

首先JAVA大神可以对此一笑而过,因为作者是一个C++方向的开发人员,该文仅记录开发过程中的问题,并希望在错误之处得到纠正     从事多年C++开发后,一个偶然的机会接触到一个JAVA的项目,刚接...
  • crow6313077
  • crow6313077
  • 2016年12月01日 19:47
  • 371

线程的同步对象

使同一进程的各线程协调一致地工作称为线程的同步。MFC提供了多种同步对象,通过这些类,我们可以比较容易地做到线程同步。最常用的四种: 1、临界区(CCriticalSection) 2、事...
  • xringm
  • xringm
  • 2016年03月24日 10:40
  • 506

ThreadLocal 为线程绑定对象

java.lang.ThreadLocal 类,对它的调用在不同线程中有不同的结果。 1.使用场景 有些类不是线程安全的,若想在多线程下使用,我们可以为每个线程绑定一个此类的对象。 2.常用方法 ...
  • chuchus
  • chuchus
  • 2016年05月11日 13:38
  • 1208

JAVA学习篇--ThreadLocal,Java中特殊的线程绑定机制

在DRP项目中,我们使用了ThreadLocal来创建Connection连接,避免了一直以参数的形式将Connection向下传递(传递connection的目的是由于jdbc事务要求确保使用同一个...
  • hejingyuan6
  • hejingyuan6
  • 2014年07月17日 09:05
  • 6389

qt中的线程 拥有权 一个对象属于哪个线程

C++ class MyThread : public QThread { public: MyThread() { otherObj = new QObject; ...
  • zhangbinsijifeng
  • zhangbinsijifeng
  • 2016年08月24日 14:03
  • 1131

调用线程无法访问此对象,因为另一个线程拥有该对象

调用线程无法访问此对象,因为另一个线程拥有该对象
  • IT_ziliang
  • IT_ziliang
  • 2016年12月08日 09:02
  • 468

关于调用线程无法访问此对象,因为另一个线程拥有该对象的问题的解决办法

这个问题出现的原因主要是线程间的访问限制导致的,如果想要访问可以通过委托来进行访问  this.userModeControl.Dispatcher.Invoke(              ...
  • u011549779
  • u011549779
  • 2016年11月29日 09:03
  • 1198

线程的等待与唤醒机制

为了更高效的处理一些时间片短,任务量大的任务,我们可能会经常用到多线程。但是多线程的环境下,很容易出现线程并发问题,线程死锁就是很常见的一种并发问题。为了避免此类问题,我们会用到线程间的通信,而等待唤...
  • qq_24610749
  • qq_24610749
  • 2017年05月09日 11:03
  • 415

WPF中调用线程无法访问此对象,因为另一个线程拥有该对象 的解决方法

在调试中,出现这个错误的原因,我在网上查了很多。大体上总结一下是:   两个或多个线程操作一个控件所引起的问题。          在WPF中,UI分创建线程和访问线程。所以需要用委托机制来解决。 ...
  • huguoqun
  • huguoqun
  • 2013年10月30日 21:09
  • 3743
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【线程对象与线程】
举报原因:
原因补充:

(最多只允许输入30个字)