使用线程时有两个主要任务:
第一,创建线程,
第二,创建线程入口函数。
Windows API调用CreateThread函数来创建一个线程。
hthread := CreateThread(参数1,参数2,参数3,参数4,参数5,参数6);
参数1 = nil, //是安全属性,如果此参数设为Nil,使用的是缺省安全属性,在Windows95/98下,标准的就设为Nil,只有想此线程有子线程时才可能脱离这种模式。
参数2 = 0, //如果这个参数为0,就是线程的堆栈长度和此应用程序的的堆栈长度相同,可以总把此参数设置为0 。
参数3 = @ThreadFunc, //线程开始初的线程名称,
参数4 = nil, // argument of thread
参数5 = 0, // Create flags - CREATE_SUSPENDED
参数6 =ThreadID //返回一个线程的ID
{创建线程运行任务主体}
function ThreadFunc(P: Pointer): LongInt; stdcall; var i:Integer; DC:HDC; S:string; begin DC := GetDC(Form1.Handle); SetBkColor(DC, GetSysColor(color_btnface)); for i := 0 to 100000 do begin S := IntToStr(i); TextOut(DC, 10, 10, PChar(S), Length(S)); end; ReleaseDC(Form1.Handle, DC); end;
//采用一个多线程 procedure TForm1.Button1Click(Sender: TObject); var hThread: THandle; ThreadID: DWord; begin hthread := CreateThread(nil, 0,@ThreadFunc, nil, 0,ThreadID); if hthread = 0 then MessageBox(Handle, 'No Thread', nil, MB_OK); end;
//采用单线程 procedure TForm1.Button2Click(Sender: TObject); begin ThreadFunc(nil); end; | |