Mutex in QT
-
Hallo Community,
Mein Problem ist es, dass ich eine Mutex Klasse aus Delphi (die WinAPI befehle braucht) plattformunabhängig - sprich QT - umsetzen soll.
Die Klasse sieht folgendermassen aus:
constructor TMutex.Create(const Name: string); begin FHandle := CreateMutex(nil, False, PChar(Name)); if FHandle = 0 then abort; end; function TMutex.Get(TimeOut: Integer): Boolean; begin Result := WaitForSingleObject(FHandle, TimeOut) = WAIT_OBJECT_0; end; function TMutex.Release: Boolean; begin Result := ReleaseMutex(FHandle); end;
TMutex.Create ist ja nichts anderes als der Konstruktor eines QMutex.
Dasselbe bei TMutex.Release -> Dekonstruktor.Was mir aber nicht ganz klar ist; was bewirkt WaitForSingleObject?
Laut MSDN (http://msdn.microsoft.com/en-us/library/ms687032(v=vs.85).aspx) wartet die Funktion bis sich das Handle (in dem Falle von meinem Mutex) in einem 'signaled state' befindet.
Was ist genau dieser signaled state?
Und mit welcher QT Funktion kann man dies vergleichen?Beste Grüsse & Vielen Dank
-
dass ich eine Mutex Klasse aus Delphi (die WinAPI befehle braucht) plattformunabhängig - sprich QT - umsetzen soll.
"umsetzen" wird schwierig, weil Qt die Sync funktionen des BS nicht plattformunabhaengig neu definiert, sondern sie nur adaptiert (benutzt).
Das heisst, du wirst keine Funktion (C Level) in QT finden, Die dir WaitForSingleObject auf diesen level zur verfuegung stellt.
Dafuer bietet Qt plattformunabhaengig auf C++ Ebene fertige Synchronisationsobjecte an. Ganz speziell zum beispiel deinen Mutex, als QMutex.
Ob der aber das ist was Du brauchst, kann ich so nicht sagen, weil:
CreateMutex(nil, False, PChar(Name));
Brauchst Du wirklich einen "Named" Mutex ? Also muss der Mutex Prozessübergreifend sein ?
Der QMutex ist nur prozessintern zu verwenden, ist also ein "UnNamed" Mutex.Übrigens wird sich QT schwertun, "Named" BS-Objecte zur verfuegung zu stellen, weil eben nicht alle BS'e die Qt so unterstützt, überhaupt "Named" Synchronisationsobjecte bereitstellen.
Ciao ...
-
Hi,
Also die ganze Mutex Klasse unterhalb ist mit der QMutex Klasse zu vergleichen?
Und der Mutex von QT ist also unnamed & kann nur vom gleichen Prozess benutzt werden?Habe ich dies so richtig verstanden?
grz
-
Würde da immer die Doku empfehlen:
http://doc.qt.nokia.com/latest/threads.html