![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Доброе время суток. У меня такая проблема. Написали программу в которой два потока которые выполняют одну операцию. В данных потока установлен по умолчанию приоритет "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
|
||||
|
||||
![]() Цитата:
Код:
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
|
|||
|
|||
![]() Цитата:
решил другим путем Спасибо, за столь активное участие ![]() |