Einzelnen Beitrag anzeigen

messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#5

AW: EnterCriticalsection erzeugt für einige Zeit hohe CPU Last

  Alt 20. Aug 2010, 12:42
Delphi-Quellcode:
var
  DataMutex : THandle; //Mutex für die Zugriffssteuerung auf den Datenpuffer
  initialization
  DataMutex := CreateMutex(nil,false,nil);
  
  //im Thread oder in der GUI dann z.B.:
      try
        if WaitForSingleObject(DataMutex,100) = WAIT_OBJECT_0 then
        begin
          //Datenübergabe
        end
        else
        begin
          WriteError('DataMutex','hier ist was schief gelaufen');
        end;
      finally
        ReleaseMutex(DataMutex);
      end;
Das benutzen dann alle Routinen, die auf den Speicher zugreifen wollen, hier sehr schnelle Vorgänge. Deshalb ist auch schon bei 100ms ein timeout. Bei Dir würde so ein Wert dann eher bei 10000 liegen. Aber Du kannst das explizit festlegen (auch mit INFINITE), und Du selbst fasst den geschützen Bereich an und lässt ihn wieder los. Zusätzlich kann man damit auch mehrere Ebenen verschachteln.

Grüße, Messie
  Mit Zitat antworten Zitat