在软件开发的过程中,多线程的开发应用有着极为重要的位置,使用多线程可以让软件系统
能够并行操作、同时也能提高其运行效率。作为软件开发人员的必修课之一,多线程的熟练
运用可以让软件系统有更佳的性能表现。
以下使用Window Api、Delphi 封装的TThread类来分别创建线程,再以普通方法来执行
一个耗时的过程,对比使用线程的好处。
1. Windows API 函数直接创建
主要是CreateThread 函数,其函数式如下:
HANDLE CreateThread(
// 线程安全属性,默认用Nil
LPSECURITY_ATTRIBUTES lpThreadAttributes,
// 线程分配的堆栈大小,默认为0,系统自动分配
DWORD dwStackSize,
// 线程函数入口地址,要求是不带参数的全局性的方法
LPTHREAD_START_ROUTINE lpStartAddress,
// 传递给线程的参数值
LPVOID lpParameter,
// 创建线程的标识,如CREATE_SUSPENDED (挂起)
DWORD dwCreationFlags,
//返回的线程标识identifier
LPDWORD lpThreadId
);
如果线程创建成功,返回值为其句柄值 .
在Delphi 项目中新建一个窗体,写下以下线程函数,以便调用
procedure APIThread1;
var i,cId:Integer;
begin
with Form2 do
begin
for i:=1 to imax do
begin
EnterCriticalSection(Rtl);
cId := GetCurrentThreadId ; //获取当前执行的线程标识
Memo1.Lines.Add('Thread ID '+inttostr(cId)+ ' : '+inttostr(i));
LeaveCriticalSection(Rtl);
end;
end;
end;
为防止多个线程同时访问(读写)同一个VCL资源引起出错,使用了临界变量 Rtl,
所以要声明一个局部的临界变量
Var
Rtl : TRTLCriticalSection;
其作用相当于一个协议锁,比如: 当APIThread1 函数,被CreateThread
(nil,0,&