delphi线程对象tthread

delphi线程对象tthread

ID:34416145

大小:29.08 KB

页数:10页

时间:2019-03-05

delphi线程对象tthread_第1页
delphi线程对象tthread_第2页
delphi线程对象tthread_第3页
delphi线程对象tthread_第4页
delphi线程对象tthread_第5页
资源描述:

《delphi线程对象tthread》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、多线程的基本概念和Delphi线程对象Tthread介绍WIN98/NT/2000/XP是个多任务操作系统,也就是:一个进程可以划分为多个线程,每个线程轮流占用CPU运行时间和资源,或者说,把CPU 时间划成片,每个片分给不同的线程,这样,每个线程轮流的“挂起”和“唤醒”,由于时间片很小,给人的感觉是同时运行的。多线程带来如下好处:1)避免瓶颈;2)并行操作;3)提高效率;多线程的两个概念:1) 进程:也称任务,程序载入内存,并分配资源,称为“一个进程”。注意:进程本身并不一定要正在执行。进程由以下几部分组成:a>一个私有的地址空间

2、,它是进程可以使用的一组虚拟内存地址空间;b>程序的相关代码、数据源;c>系统资源,比如操作系统同步对象等;d>至少包含一个线程(主线程);2) 线程:是进程的执行单位(线程本身并不包括程序代码,真正拥有代码的是进程),是操作系统分配CPU时间的基本实体,每个进程至少包括一个线程,称为主线程。一个进程如果有多个线程,就可以共享同一进程的资源,并可以并发执行。通俗点说就是进程中一段并发运行的代码(一个函数或过程)。线程主要由如下两部分组成:a>数据结构;b>CPU 寄存器和堆栈;线程函数运行,启动函数就返回了,主线程继续向下执行,而线

3、程函数在一个独立的线程中执行,它要执行多久,什么时候返回,主线程是不管也不知道的。一、Delphi线程对象--- Tthread虽然Windows提供了较多的多线程设计的API 函数,但是直接使用API 函数极其不方便,而且使用不当还容易出错。为解决这个问题,Borland公司率先推出了一种Tthread 对象,来解决多线程设计上的困难,简化了多线程问题的处理。一、Tthread对象的主要方法构造线程:constructorCreate(CreateSuspended:boolean)CreateSuspended=true构造但不

4、唤醒 ;false构造的同时即唤醒 。挂起线程:suspend:(把线程挂起的次数加一)唤醒线程:resume :(注意:注意这个属性是把线程挂起的次数减一,当次数为0时,即唤醒。也就是说,线程挂起多少次,唤醒也需要多少次。同时挂起的时候将保持线程的地址指针不变,所以线程挂起后再唤醒,将从挂起的地方开始运行)析构(清除线程所占用的内存):destroy终止线程Terminate 使用这个类也很简单,基本用法是:先从TThread派生一个自己的线程类(因为TThread是一个抽象类,不能生成实例),然后是覆盖(Override)抽象方

5、法:Execute(这就是线程函数,也就是在线程中执行的代码部分),如果需要用到可视VCL对象,还需要通过Synchronize过程进行。线程的终止和退出:1)自动退出:一个线程从Execute()过程中退出,即意味着线程的终止,此时将调用Windows的ExitThread()函数来清除线程所占用的堆栈。如果线程对象的 FreeOnTerminate属性设为True,则线程对象将自动删除,并释放线程所占用的资源。这是消除线程对象最简单的办法。2)受控退出:利用线程对象的Terminate属性,可以由进程或者由其他线程控制线程的退出

6、。只需要简单的调用该线程的Terminate方法,并设置线程对象的Terminate属性为True。  一般来说,在线程中,应该不断监视Terminate的值,一旦发现为True,则退出,一般来说,例如在Execute()过程中可以这样写:WhilenotTerminatedo begin ........ end;3)退出的API函数:关于线程退出的API函数声明如下:FunctionTerminateThread(hThread:Thandle;dwExitCode:DWORD);不过,这个函数会使代码立刻终止,而不管程序中有没

7、有try....finally机制,可能会导致错误,不到万不得已,最好不要使用。4)利用挂起线程的方法(suspend)利用挂起线程的suspend方法,后面跟个Free,也可以释放线程,例如:thread1.suspend;//挂起thread2.free;//释放二、多线程的同步机制同步机制,研究多线程的同步机制的必要性在于,多线程同步工作时,如果同时调用相同的资源,就可能会出现问题,如对全局变量、数据库操作发生冲突,甚至产生死锁和竞争问题。举个发生冲突的实例看一下:一般来说,对内存数据加一的操作分解以后有三个步骤:1、从内存中

8、读出数据2、数据加一3、存入内存现在假设在一个两个线程的应用中用Inc进行加一操作可能出现的一种情况:1、线程A从内存中读出数据(假设为3)2、线程B从内存中读出数据(也是3)3、线程A对数据加一(现在是4)4、线程B对数据加一(现在

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。