Показать сообщение отдельно
  #1  
Старый 07.12.2009, 17:27
galaxystar galaxystar вне форума
Прохожий
 
Регистрация: 24.05.2008
Сообщения: 4
Репутация: 10
По умолчанию Работа с потоками (Thread)

Доброе время суток. У меня такая проблема. Написали программу в которой два потока которые выполняют одну операцию. В данных потока установлен по умолчанию приоритет "tpLowest". При изменении приоритета при помощи "TrackBar", приоритет меняется на больший, но не меняется на меньший. Как исправить, помогите пожалуйста.

Код:
unit Thrdunit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Thrd, ComCtrls, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Timer1: TTimer;
    TrackBar1: TTrackBar;
    TrackBar2: TTrackBar;
    Label3: TLabel;
    Label4: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure TrackBar2Change(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
  private
    { Private declarations }
  public
     Thread1,Thread2:TSiriipieThread;
   { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
      Thread1:=TSiriipieThread.Create(true);
      Thread1.Priority:=tpLowest;
      Thread1.Resume;
      Thread2:=TSiriipieThread.Create(true);
      Thread2.Priority:=tpLowest;
      Thread2.Resume;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
      Edit1.Text:=IntToStr (Thread1.Count );
      Edit2.Text:=IntToStr (Thread2.Count );
      //Thread1.
      Thread1.Count:=0;
      Thread2.Count:=0;

end;

procedure TForm1.TrackBar2Change(Sender: TObject);
Var
    I:Integer;
    Priority:TThreadPriority;
begin
      Priority:=tpLowest;
        For I:=0 To (Sender as tTrackBar).Position + 1
          Do inc(Priority) ;
            If Sender=TrackBar2
              Then Thread1.Priority:=Priority
              Else Thread2.Priority:=Priority;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
Var
    I:Integer;
    Priority:TThreadPriority;
begin
     Priority:=tpLowest;
        For I:=0 To (Sender as tTrackBar).Position + 1
          Do inc(Priority) ;
            If Sender=TrackBar1
              Then Thread1.Priority:=Priority
              Else Thread2.Priority:=Priority;
end;

end.
сам поток
Код:
unit Thrd;

interface

uses
  Classes;

type
  TSiriipieThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
    public
      Count:Integer;
      //Thread1, Thread2: TSimpleThread;
  end;

implementation

{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure TSiriipieThread.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ TSiriipieThread }

procedure TSiriipieThread.Execute;
var
  I, Total, Avg:integer;
begin
  While True
    Do
      Begin
        Total:=0;
        For I:=1 To 10 Do
          Avg:=Avg Div 10;
          Inc(Count);
      End;
end;

end.
Ответить с цитированием