RandomClear icon

How to name a thread

RandomClear | PRO | 08/23/13 08:19:23 PM UTC | 0 ⭐ | 681 👁️ | Never ⏰ | []
Delphi |

2.63 KB

|

None

|

0 👍

/

0 👎

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