Einzelnen Beitrag anzeigen

zagota

Registriert seit: 3. Sep 2014
38 Beiträge
 
#11

AW: Probleme mit Enter/LeaveCriticalSection

  Alt 21. Sep 2016, 10:19
Timer? Doch, geht. Eine CriticalSection blockt zuverlässig alles ab, was da rein will - unabhängig davon, wo es herkommt.
Hab mal eine kleine Demo gebaut(D2010):

Es kommt 2x "enter", das Programm läuft natürlich in einer Endlosschleife.

Wo liegt mein Denkfehler?

Delphi-Quellcode:
var
  CritcalSection: TCriticalSection;

implementation

{$R *.dfm}

procedure TForm6.Button1Click(Sender: TObject);
begin
  Timer1.Enabled := True;
  CS;
end;

procedure TForm6.CS;
begin
  CritcalSection.Enter;
  try
    OutputDebugString('enter');

    while True do
    begin
      Application.ProcessMessages;
      sleep(100);
    end;

  finally
    CritcalSection.Leave;
    OutputDebugString('leave');
  end;
end;

procedure TForm6.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  CS;
end;

initialization
  CritcalSection := TCriticalSection.Create;
finalization
  CritcalSection.Free;
end.
  Mit Zitat antworten Zitat