无法进入关键部分

时间:2017-11-29 10:21:04

标签: multithreading winapi freepascal critical-section

为什么没有睡眠(1)进入临界区是不可能的?

type
  TMyThread = class(TThread)
  public
    procedure Execute; override;
  end;

var
  T: TMyThread;
  c: TRTLCriticalSection;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  InitializeCriticalSection(c);
  T := TMyThread.Create(false);
end;

procedure TMyThread.Execute;
begin
  repeat
    EnterCriticalSection(c);
    Sleep(100);
    LeaveCriticalSection(c);
    sleep(1);  // can't enter from another thread without it
  until false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  EnterCriticalSection(c);
  Caption := 'entered';
  LeaveCriticalSection(c);
end; 

由于代码太多而无法发布此文本文本文本文本文本。 哦,顺便说一下,如果该部分是由线程创建的,那么它工作正常。

0 个答案:

没有答案