![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#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 |
![]() |
![]() |
![]() |
#2 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Открываем имеющийся в составе Дельфи демонстрационный проект с синхронизацией потоков - Borland\Delphi7\Demos\Threads\thrdd emo.dpr...
Изучаем, особенно файл SortThds.pas. И успешно сдаем. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Использование потоков | 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 |