RAD Studio VCL Reference
|
TThreadPriority indicates the scheduling priority of a thread object on Windows.
TThreadPriority = ( tpIdle, tpLowest, tpLower, tpNormal, tpHigher, tpHighest, tpTimeCritical );
enum TThreadPriority { tpIdle, tpLowest, tpLower, tpNormal, tpHigher, tpHighest, tpTimeCritical };
The following are possible values of TThreadPriority:
Values |
Meaning |
tpIdle |
The thread executes only when the system is idle. The system will not interrupt other threads to execute a thread with tpIdle priority. |
tpLowest |
The thread's priority is two points below normal. |
tpLower |
The thread's priority is one point below normal. |
tpNormal |
The thread has normal priority. |
tpHigher |
The thread's priority is one point above normal. |
tpHighest |
The thread's priority is two points above normal. |
tpTimeCritical |
The thread gets highest priority. |
Delphi Examples:
{ This example shows how to create a thread and start it running at a lower priority than the main execution thread. Set the thread’s FreeOnTerminate property is True, so that there is no need to free the thread when it finishes. The Execute procedure must be overridden in the extension class of TThread or an "Abstract Error" will result. To create the extension choose the File | New | Other | Thread Object menu. } procedure TForm1.Button1Click(Sender: TObject); begin if (mythreadRunning = FALSE) then begin mythreadRunning:= TRUE; MyProcess := TMyThread.Create(True); { create suspended - secondprocess does not run yet } MyProcess.FreeOnTerminate := True; { don't need to cleanup after terminate } MyProcess.Priority := tpLower; // set the priority to lower than normal MyProcess.Resume; { now run the thread } end else MessageDlg('This thread is still running. You are going to hurt yourself!', mtInformation, [mbOk], 0); end; procedure TForm1.Button4Click(Sender: TObject); begin if mythreadRunning then MyProcess.Terminate(); end; procedure TMyThread.Execute; var I: Integer; begin Form1.Memo1.Lines.Add('Process has been running for this many seconds:'); for I := 0 to 10 do begin if Terminated then break; Form1.Memo1.Lines.Add('Low priority process ' + InttoStr(I)); Sleep(1000); end; mythreadRunning:= FALSE; end; procedure TYouThread.Execute; var I: Integer; begin Form1.Memo3.Lines.Add('Second low priority process has been running for this many seconds:'); for I := 0 to 10 do begin if Terminated then break; Form1.Memo3.Lines.Add('Second low priority process ' + InttoStr(I)); Sleep(1000); end; youthreadRunning:= FALSE; end; procedure TForm1.Button2Click(Sender: TObject); var I: Integer; begin Form1.Memo2.Lines.Add('Do some work in the main process for 10 seconds:'); for I := 0 to 10 do begin Form1.Memo2.Lines.Add('Main process ' + InttoStr(I)); Sleep(1000); end; end; procedure TForm1.Button3Click(Sender: TObject); begin if (youthreadRunning = FALSE) then begin youthreadRunning:= TRUE; YouProcess := TYouThread.Create(True); { create suspended – secondprocess does not run yet } YouProcess.FreeOnTerminate := True; { don't need to cleanup after terminate } YouProcess.Priority := tpLower; // set the priority to lower than normal YouProcess.Resume; { now run the thread } end else MessageDlg('This thread is still running. You are going to hurt yourself!', mtInformation, [mbOk], 0); end; procedure TForm1.Button5Click(Sender: TObject); begin if youthreadRunning then YouProcess.Terminate(); end; procedure TForm1.FormCreate(Sender: TObject); begin mythreadRunning:= FALSE; youthreadRunning:= FALSE; end;
Copyright(C) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
|
What do you think about this topic? Send feedback!
|