Delphi线程简介和它的create方法

TThread在Classes单元里的声明如下

type
    TThread = class
    private
        FHandle: THandle;
        FThreadID: THandle;
        FTerminated: Boolean;
        FSuspended: Boolean;
        FFreeOnTerminate: Boolean;
        FFinished: Boolean;
        FReturnValue: Integer;
        FOnterminate: TNotifyEvent;
        FMethod: TThreadMethod;
        FSynchronizeException: TObject;
        procedure CallOnTerminate;
        function GetPriority: TThreadPriority;
        procedure SetPriority(Value: TThreadPriority);
        procedure SetSuspended(value: Boolean);
    protected
        procedure DoTerminate; virtual;
        procedure Execute; virtual; abstract;
        procedure Synchronize(Method: TThreadMethod);
        property ReturnValue: Integer read FReturnValue write FReturnValue;
        property Terminated: Boolean read FTerminated;
    public
        constructor Create(CreateSuspended: Boolean);
        destructor Destroy; override;
        procedure Resume;
        procedure Terminate;
        function WaitFor: Integer;
        property FreeOnTerminate: Boolean read FFreeOnTerminate write FFreeOnTerminate;
        property Handle: THandle read FHandle;
        property Priority: TThreadPriority read GetPriority write SetPriority;
        property Suspended: Boolean read FSuspended write Suspended;
        property ThreadID: THandle read FThreadID;
        property OnTerminate: TNotifyEvent read FOnTerminate write FOnTerminate;
    end;

  

  当TThread的Create()被调用的时候,需要传递一个布尔型的参数CreateSuspended。如果把这个参数设为False,那么当调用Create()之后,Execute()会被自动调用,也就是自动地执行线程代码。如果该参数设为True,则需要运行TThread的Resume()来唤醒线程。

  一般情况下,当你调用Create()后,还会有一些其他的属性要求设置。所以,应当把CreateSuspended参数设置为True,因为在TThread已经执行的情况下设置TThread的属性可能引起麻烦。

  在讲的深一点,在构造函数Create()中隐含调用一个RTL例程BeginThread(),而它又调用了一个API函数CreateThread()来创建一个线程对象的实例。CreateSuspended参数表明是否传递CREATE_SUSPENDED标志给CreateThread()

时间: 2024-10-12 13:25:30

Delphi线程简介和它的create方法的相关文章

Delphi线程类 DIY(把类指针作为参数传进去,就可以执行类里面的方法啦)

Delphi 封装了一个很强大的线程类 TThread, 我们也自己动手制作一个简单的线程类 首先Type一个类 [delphi] view plain copy type TwwThread = class constructor Create; overload; destructor Destroy; override; private m_hThread: THandle;     //线程 m_ThreadID : TThreadID; public procedure Execute

TMsgThread, TCommThread -- 在delphi线程中实现消息循环(105篇博客,好多研究消息的文章)

在delphi线程中实现消息循环 在delphi线程中实现消息循环 Delphi的TThread类使用很方便,但是有时候我们需要在线程类中使用消息循环,delphi没有提供. 花了两天的事件研究了一下win32的消息系统,写了一个线程内消息循环的测试. 但是没有具体应用过,贴出来给有这方面需求的DFW参考一下.希望大家和我讨论. {----------------------------------------------------------------------------- Unit

多线程的基本概念和Delphi线程对象Tthread介绍

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

在delphi线程中实现消息循环

http://delphi.cjcsoft.net//viewthread.php?tid=635 在delphi线程中实现消息循环 Delphi的TThread类使用很方便,但是有时候我们需要在线程类中使用消息循环,delphi没有提供. 花了两天的事件研究了一下win32的消息系统,写了一个线程内消息循环的测试. 但是没有具体应用过,贴出来给有这方面需求的DFW参考一下.希望大家和我讨论. {--------------------------------------------------

[python] 线程简介

参考:http://www.cnblogs.com/aylin/p/5601969.html 我是搬运工,特别感谢张岩林老师! python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. 程序是运行在系统上的具有某种功能的软件,比如说浏览器,音乐播放器等. 每次执行程序的时候,都会完成一定的功能,比如说浏览器帮我们打开网页,为了

Delphi线程的终止

当线程对象的Execute()执行完毕的时候,我们就认为此线程终止了.这时候,它会调用Delphi的一个标准例程EndThread(),这个例程再调用API函数ExitThread().由ExitThread()来清除线程所占用的栈. 当结束使用TThread对象的时候,应该确保已经把这个Object Pascal对象从内存中清除了.这才能确保所有内存占有都释放掉,尽管在进程终止时候会自动清除所有的线程对象,但是及时清除已经不再使用的对象,可以使内存的使用效率提高.利用将FreeOnTermin

delphi 线程教学第六节:TList与泛型

第六节: TList 与泛型 TList 是一个重要的容器,用途广泛,配合泛型,更是如虎添翼. 我们先来改进一下带泛型的 TList 基类,以便以后使用. 本例源码下载(delphi XE8版本): FooList.Zip unit uFooList; interface uses   Generics.Collections; type   TFooList <T>= class(TList<T>)   private     procedure FreeAllItems;   

delphi xe6 调用java原生GPS的方法

如果用xe6自带的LocationSensor控件,默认优先使用网络位置,为了直接使用GPS位置,在网上搜到了以下代码,经实测证实是可用的. uses Androidapi.JNI.Location, Androidapi.JNIBridge, Androidapi.JNI.JavaTypes, Androidapi.JNI.Os,FMX.Helpers.Android,Androidapi.JNI.GraphicsContentViewText; type TLocationListener

DELPHI的split函数的各种实现方法(转)

一.单字符 function split(s,s1:string):TStringList;beginResult:=TStringList.Create;while Pos(s1,s)>0 dobegin     Result.Add(Copy(s,1,Pos(s1,s)-1));     Delete(s,1,Pos(s1,s));end;Result.Add(s);end; 二.直接使用TStringList procedure TForm1.Button3Click(Sender: TO