ВУЗ:
Составители:
Рубрика:
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
- …
- следующая ›
- последняя »
