// // -= TThreadEx sample =- // // See also: http://www.eurekalog.com/help/eurekalog/multithreading_tthreadex.php uses EBase; type TMyThread = class(TThreadEx) protected procedure Execute; override; end; procedure TMyThread.Execute; begin inherited; // <- this is important // ... actual thread's code goes there end; // ... Thread := TMyThread.Create('My Thread, FileName=' + FileName); // or Thread := TMyThread.Create(False { <- suspended? }, 'My Thread, FileName=' + FileName); // // -= TThread sample =- // uses Classes, EThreadsManager; type TMyThread = class(TThread) private FFN: String; protected procedure Execute; override; public proeprty FileName: String read FFN write FFN; end; procedure TMyThread.Execute; begin inherited; NameThread('My Thread, FileName=' + FileName); // ... actual thread's code goes there end; // // -= BeginThreadEx sample =- // // See also: http://www.eurekalog.com/help/eurekalog/multithreading_beginthreadex.php {$IFDEF EUREKALOG} uses EBase; {$ENDIF} type PThreadArguments = ^TThreadArguments; TThreadArguments = record FileName: String; // ... any other arguments end; function MyThreadProc(Parameter: Pointer): Integer; var Args: TThreadArguments; begin Args := PThreadArguments(Parameter)^; Dispose(PThreadArguments(Parameter)); // ... actual thread's code goes there end; ... var Args: PThreadArguments; TID: Cardinal; TH: THandle; begin Args := AllocMem(SizeOf(TThreadArguments)); Args.FileName := Edit1.Text; TH := {$IFDEF EUREKALOG}BeginThreadEx{$ELSE}BeginThread{$ENDIF} (nil, 0, MyThreadProc, Args, 0, TID {$IFDEF EUREKALOG}, 'FileName=' + Args.FileName{$ENDIF}); if TH = 0 then Dispose(Args) else CloseHandle(TH); end; // // -= BeginThread sample =- // uses EThreadsManager; type PThreadArguments = ^TThreadArguments; TThreadArguments = record FileName: String; // ... any other arguments end; function MyThreadProc(Parameter: Pointer): Integer; var Args: TThreadArguments; begin Args := PThreadArguments(Parameter)^; Dispose(PThreadArguments(Parameter)); NameThread('FileName=' + Args.FileName); // ... actual thread's code goes there end; ... var Args: PThreadArguments; TID: Cardinal; TH: THandle; begin Args := AllocMem(SizeOf(TThreadArguments)); Args.FileName := Edit1.Text; TH := BeginThread(nil, 0, MyThreadProc, Args, 0, TID); if TH = 0 then Dispose(Args) else CloseHandle(TH); end;