Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.203 Beiträge
 
Delphi 12 Athens
 
#2

Re: multiple instanzen (>2) einer Anwendung

  Alt 4. Mär 2009, 09:53
ich tipp jetzt einfach mal drauf, daß Anwendungen mit einem höcheren "Wert" noch ein Handle auf tiefere Mutex haben , welche natürlich beim beenden der Programme von Windows dann freigegeben werden. (schön, daß Windows jetzt aufräumt ... unter Win9x hättest du da viel Spaß)
> evnetuell OpenMutex

du solltest auch die Schleife verlassen, wenn du was gefunden hast und das mit OpenMutex geöffnete auch wieder schließen
Delphi-Quellcode:
for i := 0 to sl.Count-1 do
begin
  if openmutex(MUTEX_ALL_ACCESS, False, (PChar(sl[i])))=0
  then begin
    mutex_x:= sl[i];
    break; <<<
  end;
end;
aber eigentlich brauchst du nur mit CreateMutex alle Möglichkeiten durchprobieren und wenn nichts frei war, dann beenden.
Delphi-Quellcode:
Const mutex: Array[0..4] of String = (
  'Global\{03D1CB1A-5C2C-4B0D-9311-F585653FF735}',
  'Global\{03D1CB1A-5C2C-4B0D-9311-F585653FF733}',
  'Global\{03D1CB1A-5C2C-4B0D-9311-F585653FF734}',
  'Global\{03D1CB1A-5C2C-4B0D-9311-F585653FF732}',
  'Global\{03D1CB1A-5C2C-4B0D-9311-F585653FF731}');

Initialization
  For i := 0 to High(mutex) do Begin
    mH := CreateMutex(nil, True, PChar(mutex_x));
    If mH <> 0 Then Break;
  End;
  If mH = 0 Then Begin
    MessageBox(0, PChar(MSG004), nil, MB_OK or MB_ICONEXCLAMATION);
    Halt(0);
  End;

Finalization
  If mH <> 0 Then ReleaseMutex(mH);

End.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat