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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
| unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, TeEngine, Series, TeeProcs, Chart, Buttons;
type
TForm1 = class(TForm)
RadioGroup1: TRadioGroup;
RadioGroup2: TRadioGroup;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Button1: TButton;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const Max = 10000;
var
Form1 : TForm1;
Handle_1, Handle_2 : THandle;
ThreadID1, ThreadID2 : Cardinal;
sleep_1, sleep_2 : integer;
implementation
{$R *.dfm}
procedure FirstHandle;
var i, j : integer;
begin
writeln('In the beginning Handle_1 : ', Handle_1);
for i := 1 to Max do
begin
for j := 1 to sleep_1 do;
write('1');
end;
writeln;
writeln('The priority of first handle: ', GetThreadPriority(Handle_1));
writeln;
writeln('In the end Handle_1 : ', Handle_1);
end;
procedure SecondHandle;
var i, j : integer;
begin
writeln;
writeln('In the beginning Handle_2 : ', Handle_2);
for i := 1 to Max do
begin
for j := 1 to sleep_2 do;
write('2');
end;
writeln;
writeln('The priority of second handle: ', GetThreadPriority(Handle_2));
writeln;
writeln('In the end Handle_2 : ', Handle_2);
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
try
sleep_1 := StrToInt(Edit1.Text);
sleep_2 := StrToInt(Edit2.Text);
except on EConvertError do
begin
MessageDlg('Ошибка!', mtError, [mbOk], 0);
Exit;
end;
end;
Handle_1 := CreateThread(nil, 0, @FirstHandle, nil, CREATE_SUSPENDED, ThreadID1);
Handle_2 := CreateThread(nil, 0, @SecondHandle, nil, CREATE_SUSPENDED, ThreadID2);
case RadioGroup1.ItemIndex of
0 : SetThreadPriority(Handle_1, Thread_Priority_Time_Critical);
1 : SetThreadPriority(Handle_1, Thread_Priority_Highest);
2 : SetThreadPriority(Handle_1, Thread_Priority_Above_Normal);
3 : SetThreadPriority(Handle_1, Thread_Priority_Normal);
4 : SetThreadPriority(Handle_1, Thread_Priority_Below_Normal);
5 : SetThreadPriority(Handle_1, Thread_Priority_Idle);
end;
case RadioGroup2.ItemIndex of
0 : SetThreadPriority(Handle_2, Thread_Priority_Time_Critical);
1 : SetThreadPriority(Handle_2, Thread_Priority_Highest);
2 : SetThreadPriority(Handle_2, Thread_Priority_Above_Normal);
3 : SetThreadPriority(Handle_2, Thread_Priority_Normal);
4 : SetThreadPriority(Handle_2, Thread_Priority_Below_Normal);
5 : SetThreadPriority(Handle_2, Thread_Priority_Idle);
end;
ResumeThread(Handle_1);
ResumeThread(Handle_2);
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Form1.Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text := '100';
Edit2.Text := '100';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
case RadioGroup1.ItemIndex of
0 : SetThreadPriority(Handle_1, Thread_Priority_Time_Critical);
1 : SetThreadPriority(Handle_1, Thread_Priority_Highest);
2 : SetThreadPriority(Handle_1, Thread_Priority_Above_Normal);
3 : SetThreadPriority(Handle_1, Thread_Priority_Normal);
4 : SetThreadPriority(Handle_1, Thread_Priority_Below_Normal);
5 : SetThreadPriority(Handle_1, Thread_Priority_Idle);
end;
case RadioGroup2.ItemIndex of
0 : SetThreadPriority(Handle_2, Thread_Priority_Time_Critical);
1 : SetThreadPriority(Handle_2, Thread_Priority_Highest);
2 : SetThreadPriority(Handle_2, Thread_Priority_Above_Normal);
3 : SetThreadPriority(Handle_2, Thread_Priority_Normal);
4 : SetThreadPriority(Handle_2, Thread_Priority_Below_Normal);
5 : SetThreadPriority(Handle_2, Thread_Priority_Idle);
end;
end;
end. |