Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Buttons;
type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
Edit1: TEdit;
Label1: TLabel;
BitBtn1: TBitBtn;
RadioGroup1: TRadioGroup;
RadioGroup2: TRadioGroup;
RadioGroup3: TRadioGroup;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Time:integer;
Handles: array[0..2] of THandle;
ThreadID1,ThreadID2,ThreadID3:Cardinal;
implementation
{$R *.dfm}
procedure FirstHandle;
var x,y,x1,i:integer;
begin
x:=0;
y:=100;
while x<750 do
begin
x1:=x;
Inc(x);
Form1.Image1.Canvas.Pen.Color:=clBlack;
Form1.Image1.Canvas.MoveTo(x1,y);
Form1.Image1.Canvas.LineTo(x,y);
for i:=1 to Time do;
end;
end;
procedure SecondHandle;
var x,y,x1,i:integer;
begin
x:=0;
y:=150;
while x<750 do
begin
x1:=x;
inc(x);
Form1.Image1.Canvas.Pen.Color:=clRed;
Form1.Image1.Canvas.MoveTo(x1,y);
Form1.Image1.Canvas.LineTo(x,y);
for i:=1 to Time do;
end;
end;
procedure ThirdHandle;
var x,y,x1,i:integer;
begin
x:=0;
y:=200;
while x<750 do
begin
x1:=x;
inc(x);
Form1.Image1.Canvas.Pen.Color:=clAqua;
Form1.Image1.Canvas.MoveTo(x1,y);
Form1.Image1.Canvas.LineTo(x,y);
for i:=1 to Time do;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
try
Time:=StrToInt(Edit1.Text)*1000000;
except on EConvertError do
begin
MessageDlg('Не корректный ввод!',mtError,[mbOk],0);
Exit;
end;
end;
Handles[0]:=CreateThread(nil, 0, @FirstHandle, nil, CREATE_SUSPENDED, ThreadID1);
Handles[1]:=CreateThread(nil, 0, @SecondHandle, nil, CREATE_SUSPENDED, ThreadID2);
Handles[2]:=CreateThread(nil, 0, @ThirdHandle, nil, CREATE_SUSPENDED, ThreadID3);
case RadioGroup1.ItemIndex of
0: SetThreadPriority(Handles[0],Thread_Priority_Time_Critical);
1: SetThreadPriority(Handles[0],Thread_Priority_Highest);
2: SetThreadPriority(Handles[0],Thread_Priority_Above_Normal);
3: SetThreadPriority(Handles[0],Thread_Priority_Normal);
4: SetThreadPriority(Handles[0],Thread_Priority_Below_Normal);
5: SetThreadPriority(Handles[0],Thread_Priority_Idle);
end;
case RadioGroup2.ItemIndex of
0: SetThreadPriority(Handles[1],Thread_Priority_Time_Critical);
1: SetThreadPriority(Handles[1],Thread_Priority_Highest);
2: SetThreadPriority(Handles[1],Thread_Priority_Above_Normal);
3: SetThreadPriority(Handles[1],Thread_Priority_Normal);
4: SetThreadPriority(Handles[1],Thread_Priority_Below_Normal);
5: SetThreadPriority(Handles[1],Thread_Priority_Idle);
end;
case RadioGroup3.ItemIndex of
0: SetThreadPriority(Handles[2],Thread_Priority_Time_Critical);
1: SetThreadPriority(Handles[2],Thread_Priority_Highest);
2: SetThreadPriority(Handles[2],Thread_Priority_Above_Normal);
3: SetThreadPriority(Handles[2],Thread_Priority_Normal);
4: SetThreadPriority(Handles[2],Thread_Priority_Below_Normal);
5: SetThreadPriority(Handles[2],Thread_Priority_Idle);
end;
ResumeThread(Handles[0]);
ResumeThread(Handles[1]);
ResumeThread(Handles[2]);
CloseHandle(Handles[0]);
CloseHandle(Handles[1]);
CloseHandle(Handles[2]);
end;
end.
Программа выводит горизонтальные линии на экран. Как сделать так, чтобы в один момент времени работал только один поток?