Mega Code Archive

 
Categories / Delphi / Procedures
 

Endthread - terminates a thread with an exit code system unit

procedure EndThread ( ExitCode : Integer ) ; Description The EndThread procedure ends a thread function, passing the ExitCode to the caller. Threads are a complex matter (the example is a very simple example, but is still not so short), and beyond detailed discussion here. Threads can be started using BeginThread as in the example, or using the TThread class. Related commands BeginThread Begins a separate thread of code execution IsMultiThread Returns true if the code is running multiple threads ThreadVar Defines variables that are given separate instances per thread Example code : A simple example // Full Unit code. // ----------------------------------------------------------- // You must store this code in a unit called Unit1 with a form // called Form1 that has an OnCreate event called FormCreate. unit Unit1; interface uses Forms, Dialogs, Windows, SysUtils; type TMsgRecord = record msg : string[30]; end; TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end; var Form1: TForm1; Implementation {$R *.dfm} // Include form definitions ThreadVar // We must allow each thread its own instances // of the passed record variable msgPtr : ^TMsgRecord; // Private thread procedure to show a string function ShowMsg(Parameter : Pointer) : Integer; begin // Set up a 0 return value Result := 0; // Map the pointer to the passed data // Note that each thread has a separate copy of msgPtr msgPtr := Parameter; // Display this message ShowMessagePos('Thread message : '+msgPtr.msg, 200, 100); // End the thread EndThread(0); end; procedure TForm1.FormCreate(Sender: TObject); var id1 : LongWord; thread1 : Integer; msg1 : TMsgRecord; showMsgFunc : TThreadFunc; begin // Set up the thread function showMsgFunc := Addr(ShowMsg); // Set up our display messages msg1.msg := 'Hello World'; // Inidicate that we are not running a thread if IsMultiThread then ShowMessage('Multi-threaded') else ShowMessage('Single threaded'); // Start the first thread running asking for users first name thread1 := BeginThread(nil, 0, showMsgFunc, Addr(msg1), 0, id1); // Inidicate that we are running a thread if IsMultiThread then ShowMessage('Multi-threaded') else ShowMessage('Single threaded'); // Ensure that the thread is only closed when all done ShowMessagePos('Press this when thread dialog finished.', 200, 300); // Finally, tidy up by closing the threads CloseHandle(thread1); end; end. A sequence of dialogs is displayed: Single threaded Multi-threaded + Thread message : Hello World Press this when the thread dialog finished.