//
// -= 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;
Comments