Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2008, 04:52   #1
натка
Новичок
Джуниор
 
Аватар для натка
 
Регистрация: 03.01.2008
Сообщений: 1
По умолчанию Реализация функций синхронизации потоков.

Уважаемые программисты!! Если я в ближайшие дни не сдам эту программу злостному преподавателю, то мне будет очень плохо!!


2. Реализация функций синхронизации потоков. Программа, разработанная в ходе предыдущей лабораторной работы, наращивается средствами синхронизации процессов. Для ввода/вывода задается фиксированное количество устройств, каждое из которых будет занято в течение периода ввода/вывода в ходе обращения к нему некоторого процесса. Другой процесс, также желающий обратиться к тому же устройству ввода/вывода, должен быть переведен в состояние ожидания. Кроме того, в программу вводятся семафоры. При запуске процесса пользователь должен иметь возможность указать, какие семафоры данный процесс будет использовать для перевода в сигнальное состояние, а какие для перевода в несигнальное состояние. Считается, что процесс, переводящий семафор в несигнальное состояние должен дождаться его перевода в сигнальное состояние.


а вот предыдущая лаба:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Gauges, Spin, ExtCtrls , Unit1;

type
TForm1 = class(TForm)
Panel1: TPanel;
SpinEdit1: TSpinEdit;
Gauge1: TGauge;
Button1: TButton;
mmoutput: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
if Tag=0 then

begin

SpinEdit1.Text := FloatToStr(sqr(StrToFloat(SpinEdit1 .Text))) ;

if StrToFloat(SpinEdit1.Text) > 1000000 then

begin

Tag := 1;

Button1.Caption := 'Корень'
end
end
else
begin
SpinEdit1.Text := FloatToStr(sqrt(StrToFloat(SpinEdit 1.Text))) ;
if StrToFloat(SpinEdit1.Text) < 2 then
begin
SpinEdit1.Value := 2;
Tag := 0;
Button1.Caption := 'Квадрат'
end
end
end;
end.

unit Unit2;

interface

uses
Classes;

type
Mythread = class(TThread);
ThreadDemo = class (TThread)
private

{ Private declarations } protected

S : String;

N: Integer;

procedure UpdateMemo;

procedure UpdateGauge;

procedure Execute; override;

end;

var

TDemo: ThreadDemo;

implementation

uses Unit1,SysUtils;




{ 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 Mythread.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }

{ Mythread }
procedure ThreadDemo.Execute;

var

j, k: Integer;

begin

repeat

S:='';

Synchronize(UpdateMemo);

for k := 0 to 99 do

begin N := k;

S := ' ' ;

for j := 1 to 20 do

S := S+FormatFloat('00',k); Synchronize(UpdateMemo) ;

Synchronize(UpdateGauge)

end;

until False

end;

Procedure ThreadDemo.UpdateMemo;

begin

with Form1.mmOutput.Lines do

if S=' ' then

Clear else

Add(S)

end;

Procedure ThreadDemo.UpdateGauge;

begin

Form1.Gauge1.Progress := N

end;
procedure FormActivate(Sender: TObject);

begin

TDemo := ThreadDemo.Create (False);

end;


end.



a.d.e.k.v.a.t@mail.ru
натка вне форума Ответить с цитированием
Старый 03.01.2008, 15:26   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Открываем имеющийся в составе Дельфи демонстрационный проект с синхронизацией потоков - Borland\Delphi7\Demos\Threads\thrdd emo.dpr...
Изучаем, особенно файл SortThds.pas. И успешно сдаем.
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование потоков Repz Общие вопросы Delphi 6 25.01.2008 14:20
Несколько потоков Adm Общие вопросы Delphi 13 18.01.2008 20:04
Перенаправление потоков Carbon Win Api 5 25.11.2007 14:46
Дескрипторы потоков - Для каждого элемента списка необходимо создать поток, выполняющий требуемые функции kdv0403 Общие вопросы Delphi 2 09.06.2007 11:12