ВУЗ:
Составители:
Рубрика:
15
{ ЗАМЕЧАНИЕ: Перенесите переменную GlobalStr из блока
var в блок
threadvar и обратите внимание на разницу в результате работы
приложения. }
var
//threadvar
GlobalStr: string;
type
TTLSThread = class(TThread)
private
FNewStr: String; protected
procedure Execute; override;
public
constructor Create(const ANewStr: String);
end;
procedure SetShowStr(const S: String);
begin
if S = '' then
MessageBox(0, PChar(GlobalStr), 'The string is...', MB_0K)
else
GlobalStr := S;
end;
constructor TTLSThread.Create(const ANewStr: String);
begin
FNewStr := ANewStr;
inherited Create (False);
end;
procedure TTLSThread.Execute;
begin
FreeOnTerminate := True;
SetShowStr(FNewStr);
SetShowStr('');
end;
procedure TMainForm.ButtonlClick(Sender: TObject);
begin
SetShowStr('Hello world');
SetShowStr('');
TTLSThread.Create('Dilbert');
Sleep (100);
SetShowStr('');
end;
end.
B этой демонстрационной программе после создания вторичного потока вы -
зывается процедура Win32 API sleep, которая объявляется следующим образом:
procedure Sleep(dwMilliseconds: DWORD); stdcall;
Процедура sleep сообщает операционной системе, что текущий поток не нуж -
дается в дополнительных циклах процессора в течение миллисекунд, заданных
15 { ЗАМЕЧАНИЕ: Перенесите переменную GlobalStr из блока var в блок threadvar и обратите внимание на разницу в результате работы приложения. } var //threadvar GlobalStr: string; type TTLSThread = class(TThread) private FNewStr: String; protected procedure Execute; override; public constructor Create(const ANewStr: String); end; procedure SetShowStr(const S: String); begin if S = '' then MessageBox(0, PChar(GlobalStr), 'The string is...', MB_0K) else GlobalStr := S; end; constructor TTLSThread.Create(const ANewStr: String); begin FNewStr := ANewStr; inherited Create (False); end; procedure TTLSThread.Execute; begin FreeOnTerminate := True; SetShowStr(FNewStr); SetShowStr(''); end; procedure TMainForm.ButtonlClick(Sender: TObject); begin SetShowStr('Hello world'); SetShowStr(''); TTLSThread.Create('Dilbert'); Sleep (100); SetShowStr(''); end; end. B этой демо нстрацио нно й про грамме по сле со здания вторично го по тока вы - зы вается про цедураWin32 API sleep, ко торая о бъ является следую щ им о бразо м: procedure Sleep(dwMilliseconds: DWORD); stdcall; П ро цедура sleep со о бщ аето перацио нно й системе, что текущ ий по ток не нуж - дается в до по лнительны х циклах про цессо рав течение миллисекунд, заданны х
Страницы
- « первая
- ‹ предыдущая
- …
- 13
- 14
- 15
- 16
- 17
- …
- следующая ›
- последняя »