Создание многопоточных приложений. Копытин А.В - 15 стр.

UptoLike

Составители: 

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 со о бщ аето перацио нно й системе, что текущ ий по ток не нуж -
дается в до по лнительны х циклах про цессо рав течение миллисекунд, заданны х