Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: CreateMutex läßt mehrfachstart zu...

  Alt 1. Sep 2012, 19:44
Naja prinzipiell gibt es folgende Möglichkeiten:
  • CreateMutex schlägt fehl (Result = 0; bedingt durch fehlende Rechte, etc)
  • CreateMutex gibt ein Handle zurück und GetLastError ist <> ERROR_ALREADY_EXISTS
  • CreateMutex gibt ein Handle zurück und GetLastError ist = ERROR_ALREADY_EXISTS

Ich würde den Check auf hMutex = 0 und GetLastError = ERROR_ALREADY_EXISTS nicht in die selben Abfrage einbauen.

Delphi-Quellcode:
procedure TForm1.MutexCheck;
var
  hMutex: THandle;
begin
  hMutex := CreateMutex(nil, true, 'MutexName');
  if (hMutex = 0) then
  begin
    // kritischer Fehler beim Erzeugen / Öffnen des Mutex
  end else
  begin
    if (GetLastError = ERROR_ALREADY_EXISTS) then
    begin
      // bestehende Instanz kontaktieren
      // ist hier dein Parameter = /OPEN, brauchst du eigentlich nur die alte
      // Instanz schließen. Dadurch, dass du an dieser Stelle schon ein
      // Handle des Mutex geöffnet hast, "müsste" die aktuelle Instanz dann
      // automatisch zur "CallApp" werden.

      // an dieser Stelle könnte man wohl auch noch ein CloseHandle(hMutex)
      // einbauen, fals der Parameter NICHT /OPEN ist
    end else
    begin
      // dies ist die erste Instanz
    end;
  end;
end;
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat