ВУЗ:
Составители:
Рубрика:
14
var
Form1: TForm1;
type
TMyThread = class(TThread)
private
{ Private declarations }
mem: TMemo;
// В переменную mem при вызове конструктора потока будет
// передаваться конкретный экземпляр TMemo
protected
constructor Create (M: TMemo);// Переопределение
procedure Execute; override;
procedure OutMessage;
end;
implementation
{$R *.DFM}
var CritSect: boolean; // Флаг «включать-не включать»
Sect1: TRTLCriticalSection;
//Критическая секция
GlobalData: integer; // Глобальная переменная
constructor TMyThread.Create(m: TMemo);
begin //Переопределяем конструктор
Inherited Create(False);//Вызываем унаследованный
Mem := m; // Передаем, куда записывать числа
end;
procedure TMyThread.OutMessage;
begin
// Добавление строки в редактор
Mem.Lines.add(IntToStr(GlobalData));
end;
procedure TMyThread.Execute;
var j: integer;
begin
for j:=1 to 50 do begin
// Если механизм критической секции используется
if (CritSect) then EnterCriticalSection(Sect1);
// Вход в критическую секцию
// Изменение глобальной переменной
GlobalData := GlobalData+3;
Sleep(3); // Задержка на 3 мс для увеличения
// вероятности рассинхронизации
GlobalData := GlobalData-3;
Synchronize(OutMessage);
// Выход из критической секции
if (CritSect) then LeaveCriticalSection(Sect1);
end;
end;
var Form1: TForm1; type TMyThread = class(TThread) private { Private declarations } mem: TMemo; // В переменную mem при вызове конструктора потока будет // передаваться конкретный экземпляр TMemo protected constructor Create (M: TMemo);// Переопределение procedure Execute; override; procedure OutMessage; end; implementation {$R *.DFM} var CritSect: boolean; // Флаг «включать-не включать» Sect1: TRTLCriticalSection; //Критическая секция GlobalData: integer; // Глобальная переменная constructor TMyThread.Create(m: TMemo); begin //Переопределяем конструктор Inherited Create(False);//Вызываем унаследованный Mem := m; // Передаем, куда записывать числа end; procedure TMyThread.OutMessage; begin // Добавление строки в редактор Mem.Lines.add(IntToStr(GlobalData)); end; procedure TMyThread.Execute; var j: integer; begin for j:=1 to 50 do begin // Если механизм критической секции используется if (CritSect) then EnterCriticalSection(Sect1); // Вход в критическую секцию // Изменение глобальной переменной GlobalData := GlobalData+3; Sleep(3); // Задержка на 3 мс для увеличения // вероятности рассинхронизации GlobalData := GlobalData-3; Synchronize(OutMessage); // Выход из критической секции if (CritSect) then LeaveCriticalSection(Sect1); end; end; 14
Страницы
- « первая
- ‹ предыдущая
- …
- 12
- 13
- 14
- 15
- 16
- …
- следующая ›
- последняя »