Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #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.
Ответить с цитированием
  #2  
Старый 07.12.2009, 19:16
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

Цитата:
Код:
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;
попробуй так
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Thread1.Priority := TThreadPriority(TrackBar1.Position); //max и min от 0 до 6
end;
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
  #3  
Старый 10.12.2009, 18:14
galaxystar galaxystar вне форума
Прохожий
 
Регистрация: 24.05.2008
Сообщения: 4
Репутация: 10
Восклицание

Цитата:
Сообщение от AleD
попробуй так
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Thread1.Priority := TThreadPriority(TrackBar1.Position); //max и min от 0 до 6
end;
не помогло.
решил другим путем
Спасибо, за столь активное участие
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:34.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025