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

Delphi Sources



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

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

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

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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.
сам поток
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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
По умолчанию

Цитата:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
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;
попробуй так
Код:
1
2
3
4
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
попробуй так
Код:
1
2
3
4
procedure TForm1.FormCreate(Sender: TObject);
begin
  Thread1.Priority := TThreadPriority(TrackBar1.Position); //max и min от 0 до 6
end;
не помогло.
решил другим путем
Спасибо, за столь активное участие
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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