program namethreads; {$mode Delphi} uses SysUtils, Classes; type TMyThread = class(TThread) private i: Integer; protected procedure Execute; override; procedure SetNumber(const aNum: Integer); end; procedure TMyThread.Execute; begin writeln('hello from thread '+ThreadID.ToString); NameThreadForDebugging(IntToStr(i)); sleep(30000); end; procedure TMyThread.SetNumber(const aNum: Integer); begin i := aNum + 1; end; var threads: TArray; i: Integer; thread: TMyThread; begin writeln('start'); SetLength(threads, 5); for i := Low(threads) to High(threads) do begin threads[i] := TMyThread.Create(True); threads[i].SetNumber(i); end; for thread in threads do begin thread.Start; end; sleep(10000); TMyThread.NameThreadForDebugging('bronze', threads[2].ThreadID); // third thread TMyThread.NameThreadForDebugging('always number one'); // main thread for thread in threads do begin thread.WaitFor; end; writeln('done'); readln; end.