Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Delphi] Управление процессами (потоками)!!!!


Автор: metamfetamin 11.11.2007, 11:02
Люди дайте совет или обьясните,где в листинге нужно сделать следующие изменения: 
1.    Ввести глобальную переменную для семафора типа integer 
2.    Разместить кнопки ПУСК 1 и ПУСК 2 для запуска первого и второго потоков (нитей), перед этим устанавливается семафор в положение "занято" 
3.    Разместить кнопки СТОП 1 и СТОП 2 для остановки первого и второго потоков (нитей), устанавливается семафор в положение "свободно" 
4.    Кнопка ПУСК 1 задает для первого потока самый низкий приоритет 
5.    Кнопка ПУСК 2 задает для второго потока самый высокий приоритет 

Код
unit Unit1; 
interface 
uses 
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
StdCtrls; 
type 
TForm1 = class(TForm) 
GroupBox1: TGroupBox; 
GroupBox2: TGroupBox; 
RadioButton1: TRadioButton; 
RadioButton2: TRadioButton; 
RadioButton3: TRadioButton; 
RadioButton4: TRadioButton; 
RadioButton5: TRadioButton; 
RadioButton6: TRadioButton; 
Button1: TButton; 
ScrollBar1: TScrollBar; 
procedure Button1Click(Sender: TObject); 
procedure RadioButton1Click(Sender: TObject); 
procedure RadioButton2Click(Sender: TObject); 
procedure RadioButton3Click(Sender: TObject); 
procedure RadioButton4Click(Sender: TObject); 
procedure RadioButton5Click(Sender: TObject); 
procedure RadioButton6Click(Sender: TObject); 
procedure FormDestroy(Sender: TObject); 
private 
{ Private declarations } 
public 
{ Public declarations } 
end; 
//поток1 
TThread1 = class(TThread) 
private 
{ Private declarations } 
protected 
procedure Execute; override; 
procedure DoSomething;
end; 
//поток2 
TThread2 = class(TThread) 
private 
{ Private declarations } 
protected 
procedure Execute; override; 
procedure DoSomething; 
end; 
var 
Form1: TForm1; 
T1:TThread1; 
T2:TThread2; 
implementation 
{$R *.DFM} 
//тело потока 
procedure TThread1.Execute; 
begin 
repeat 
Synchronize(DoSomething); //синхронизирует поток с программой 
until terminated; 
end; 
procedure TThread1.DoSomething; 
begin 
Form1.ScrollBar1.Position:=10; 
end;
procedure TThread2.Execute; 
begin 
repeat 
Synchronize(DoSomething); 
until terminated; 
end; 
procedure TThread2.DoSomething; 
begin 
Form1.ScrollBar1.Position:=90; 
end; 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
T1:=TThread1.Create(false); //создать поток1 
T2:=TThread2.Create(false); //создать поток2 
RadioButton2.Checked:=true; // прио tpNormal 
RadioButton5.Checked:=true; // прио tpNormal 
Button1.Enabled:=false; 
end; 
procedure TForm1.RadioButton1Click(Sender: TObject); 
begin 
if (sender as TRadioButton).Checked then 
begin 
T1.Priority:=tpLowest; 
RadioButton6.Enabled:=true; 
end; 
end; 
procedure TForm1.RadioButton2Click(Sender: TObject); 
begin 
if (sender as TRadioButton).Checked then 
begin 
T1.Priority:=tpNormal; 
RadioButton6.Enabled:=true; 
end; 
end; 
procedure TForm1.RadioButton3Click(Sender: TObject); 
begin 
if (sender as TRadioButton).Checked then 
begin
T1.Priority:=tpHighest ; 
RadioButton6.Enabled:=false; 
end; 
end; 
procedure TForm1.RadioButton4Click(Sender: TObject); 
begin 
if (sender as TRadioButton).Checked then 
begin 
T2.Priority:=tpLowest ; 
RadioButton3.Enabled:=true; 
end; 
end; 
procedure TForm1.RadioButton5Click(Sender: TObject); 
begin
if (sender as TRadioButton).Checked then 
begin 
T2.Priority:=tpNormal; 
RadioButton3.Enabled:=true; 
end; 
end; 
procedure TForm1.RadioButton6Click(Sender: TObject); 
begin 
if (sender as TRadioButton).Checked then 
begin 
T2.Priority:=tpHighest; 
RadioButton3.Enabled:=false; 
end; 
end; 
procedure TForm1.FormDestroy(Sender: TObject); 
begin 
T1.Suspend; T2.Suspend; 
T1.Terminate; T1.Free; 
T2.Terminate; T2.Free; 
end; 
end. 



Автор: Alexeis 11.11.2007, 13:15
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)