Delphi多线程编程中的技巧
Delphi多线程编程中的技巧
(1)创建线程
MsgThread := TMsgThread.Create(False) ; //创建并执行线程
MsgThread := TMsgThread.Create(True) ; //创建线程后挂起
constructor Create(CreateSuspended: Boolean); 中的参数CreateSuspended表示创建后是否挂起线程。
(2)设置线程里没有设置循环执行的话,且设置FreeOnTerminate为True,则线程执行完后就会自己释放。
(3)在一个线程结束后,调用另一个事件的方法:
只要设置Onterminate:=某方法,这样在线程结束前自然会被调用,比如 :
procedure TSendShortMessageThread.Execute;
var
Bitmap: Tbitamp;
begin
Bimap:=Tbitmap.create(nil) ;
OnTerminate:=Threaddone;
end;
procedure Threaddone(sender: tobject);
begin
Bimap.Free; //在Destory之前会被调用
end;
(4)程序结束前安全的退出线程的方法:
if MsgThread <> nil then
begin
MsgThread.Terminate ;
MsgThread.WaitFor ;
end;
(5)判断当前线程的状态:
//以下资料来自大富翁论坛。
/判断线程是否释放
//返回值:0-已释放;1-正在运行;2-已终止但未释放;
//3-未建立或不存在
function TFrmMain.CheckThreadFreed(aThread: TThread): Byte;
var
i: DWord;
IsQuit: Boolean;
begin
if Assigned(aThread) then
begin
IsQuit := GetExitCodeThread(aThread.Handle, i);
if IsQuit then //If the function succeeds, the return value is nonzero.
//If the function fails, the return value is zero.
begin
if i = STILL_ACTIVE then //If the specified thread has not terminated,
//the termination status returned is STILL_ACTIVE.
Result := 1
else
Result := 2; //aThread未Free,因为Tthread.Destroy中有执行语句
end
else
Result := 0; //可以用GetLastError取得错误代码
end
else
Result := 3;
end;
(6)线程同步。
如果线程要调用VCL里面的内容(如:别的窗体中的控件),就需要将这个线程同步。线程同步表示交由主线程运行这段代码,各个线程都在主线程中分时间段运行。另外,要想避免多个线程同时执行同一段代码也需要将多线程同步。
临界区和互斥的作用类似,都是用来进行同步的,但它们间有以下一点差别:
临界区只能在进程内使用,也就是说只能是进程内的线程间的同步;而互斥则还可用在进程之间的;临界区所花消的时间很少,才10~15个时间片,而互斥需要400多个;临界区随着进程的终止而终止,而互斥,如果你不用closehandle()的话,在进程终止后仍然在系统内存在,也就是说它是系统全局对象;
同步的方法有:
(1)使用临界区对象。
临界区对象有两种:TRTLCriticalSection 和 CriticalSection。
ɧ
不错的 delphi 多线程编程教程 http://hi.baidu.com/luhui32599/blog/item/...在 Delphi 中使用多线程有两种方法: 调用 API、使用 TThread 类; 使用 API ...
delphi之多线程编程(一)_计算机软件及应用_IT/计算机_专业资料。讲解delphi之多...在 Delphi 中使用多线程有两种方法: 调用 API、使用 TThread 类; 使用 API ...
Delphi多线程详解_IT/计算机_专业资料。一份讲解Delphi多线程使用方法的资料,有很好...第11章 编写多线程应用程序 307 现在,可以通过调用线程对象的Create()使上述...
1、线程的创建 笔者利用 Delphi 语言进行了程序的开发和编写, 该语言的优点之一是它有一整套 线程同步方法,可以很方便地使用。 一个进程的主线程是由操作系统...
DELPHI多线程编程_计算机软件及应用_IT/计算机_专业资料。DELPHI多线程编程我们...一、TThread 对象的主要方法 构造线程: constructor Create(CreateSuspended:boolean...
Free◆ ◆delphi 多线程编程之一 create 和 Free◆ (调试环境:Delphi2007+WinX...利用将 FreeOnTerminate 的属性设为 True 的方法来及时清除线程对象是最方便的...
技能培训-Windows下Delphi的多线程编程 下 的多线程编程 今天的内容什么是线程 ...OnTerminate事件 OnTerminate事件里的代码是线程执行完 Execute方法,结束线程前自动...
Delphi多线程编程中的技巧 2页 2财富值喜欢此文档的还喜欢 不错的delphi多线程编程教... 20页 免费 Delphi 多线程实例 3页 免费 Delphi多线程实例解析 5页 免...
Delphi的多线程技术在Socket编程中的应用_信息与通信_工程科技_专业资料。Delphi的...只能逐个地实现对 D>E 的访 问" 可以采用的方法较多 F 但较为通用的方法 ...
基于Delphi7多线程技术在网络中的应用研究_专业资料。随着计算机网络技术以及分布式实时监控系统的不断发展,并发多任务程序设计技术在程序设计中占有的地位越来越重要,现...
热门文档