Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Thread gegen sich selbst absichern

  Alt 12. Jun 2008, 11:45
Threadübergreifend geht eine CriticalSection, aber nicht innerhalb eines Threads...

Ich würde eine Semaphore nehmen und damit die kritischen Teile kapseln:

Delphi-Quellcode:
  TThreadCriticalSection= Class
  private
    fSemaphore: THandle;
  public
    Constructor Create;
    Destructor Destroy; override;
    Procedure Enter;
    Procedure Leave;
  End;


Constructor TThreadCriticalSection.Create;
Begin
  fSemaphore := CreateSemaphore(Nil, 1, 1, Nil);
End;

Destructor TThreadCriticalSection.Destroy;
Begin
  closeHandle(fSemaphore);
End;

Procedure TThreadCriticalSection.Enter;
Begin
  WaitForSingleObject(fSemaphore, INFINITE)
End;

Procedure TThreadCriticalSection.Leave;
Begin
  ReleaseSemaphore(fSemaphore, 1, Nil);
End;
Dann so:
Delphi-Quellcode:
Procedure TMyClass.MyEvent;
Begin
  MyThreadCriticalSection.Enter;
  Try
    DoExclusiveStuff
  Finally
    MyThreadCriticalSection.Leave;
  End;
End;
@Luckie: Dann blinkt der Button ja ständig. (Timer alle 100ms)
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat