Einzelnen Beitrag anzeigen

tommie-lie
(Gast)

n/a Beiträge
 
#7

Re: nonVCL Programm nur einmal starten

  Alt 28. Jun 2004, 20:10
Zitat von WeTec:
tja, alles schön und gut aber wo soll ich das hinschreiben?
bei mir gibts nur eine function dlgfunc(hwnd: ... und initialization will er irgendwie nicht so richtig verstehen.
Na, da wo du's in einer VCL-Anwendung auch hinmachst, in die Projektdatei gleich hinter begin. Die müsstest du ja sowieso bearbeitet haben, wenn du eine nonVCL-Anwendung hast, und bevor du dort dein Fenster registrierst, guckst du, ob eine andere Instanz da ist. Den Code findet man ja über Mathias' Link.

Zitat von WeTec:
ps: was ist eigentlich "CreateMutex" bzw. "CreateSemaphore"??
Zwei Funktionen
Ein Mutex und ein Semaphore sind Kernelobjekte und für die Multithreadsynchronization gedacht, also damit sich ein Thread nicht mit einem anderen ins Gehege kommt, was gemeinsam genutzte Variablen angeht. Ein Mutex kann dabei 2 Werte haben, "signaled" und "unsignaled", also nur zwei Stati. Ein Semaphore kann hingegen Werte zwischen 0 und einem angegebenem Maximum annehmen, erlaubt also mehreren Threads den Zugriff auf eine beschränkte Anzahl an Ressourcen.
Um nur ein Programm zu starten benutzt man einen Semaphore, um die Ressource (Prozessor) auf einen Thread zu begrenzen. Dabei bekommt der Semaphore einen Namen zugewiesen, versucht eine zweite Instanz des Programmes diesen Namen zu öffnen, gibt's 'nen Fehler, weil der Semaphore schon existiert, diesen Fehler fängt man ab und beendet sich selbst, wenn er auftritt. Die erste Instanz kann den Semaphore ohne Probleme erzeugen, die zweite stellt fest, daß ein Semaphore mit diesem Namen bereits existier und beendet sich wieder.
  Mit Zitat antworten Zitat