![]() |
nonVCL Programm nur einmal starten
Tach.
ja ich weis. Das Problem mit dem 'Programm nur einmal starten' ist schon X-mal geklärt :wink: . Aber ich will es genauso mit einem nonVCL-Programm machen. Habe aber noch nix gefunden. hat einer ne Idee? WeTec |
Re: nonVCL Programm nur einmal starten
Wenn du weißt, dass das Problem schon x-mal geklärt ist, warum übernimmst du es dann nicht für nonVCL? Ich tue das immer. Sprich: [dp]"Semaphore"[/dp].
|
Re: nonVCL Programm nur einmal starten
einfach die function nehmen die createmutex auruft
Delphi-Quellcode:
const
kernel32 = 'kernel32.dll'; [...] function _CreateMutex(lpMutexAttributes: PSecurityAttributes; bInitialOwner: Integer; lpName: PChar): THandle; stdcall; external kernel32 name 'CreateMutexA'; |
Re: nonVCL Programm nur einmal starten
Was soll das denn? "CreateMutex" bzw. "CreateSemaphore" sind Teil der Windows-Unit. Und die gehört IMHO in ein vernünftiges nonVCL-Programm. Ansonsten musst du sehr viel selbst machen.
Man kann´s mit dem Vermeiden von Units auch übertreiben. :roll: |
Re: nonVCL Programm nur einmal starten
@MathiasSimmack: Ich bin einfach davon ausgegangen das er möglichst wenig/keine weiteren units einbinden will. Aber hast schon recht, die konstanten etc. aus der windowsunit braucht man ja auch außer mann will die auch alle selbst definieren bzw. die Datentypen und records
|
Re: nonVCL Programm nur einmal starten
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. seid mir nicht böse aber ich fang gerade erst an mit nonVCL. ps: was ist eigentlich "CreateMutex" bzw. "CreateSemaphore"?? |
Re: nonVCL Programm nur einmal starten
Zitat:
Zitat:
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. |
Re: nonVCL Programm nur einmal starten
Zitat:
Und genau darum schreibe ich mir die paar Zeilen Code auch lieber selbst in die Projektdatei. ;) @WeTec: Du redest von der Dialogfunktion, die deine Nachrichten bearbeitet. Aber in deinem Programm wird der Dialog auch noch erzeugt. Entweder über "CreateDialog" oder "DialogBox". Und davor erzeugst du den Mutex/Semaphore, prüfst ob er ggf. schon existiert. Und danach gibst du den Mutex/Semaphore wieder frei. |
Re: nonVCL Programm nur einmal starten
Zitat:
Und da es wirklich nur 'ne Handvoll Zeilen sind, tippe ich das schneller, als ich die Unit suche und korrekt einbinde. Und was ich im DF oder der DP mal im vorbeischauen gesehen habe, spielte sich auch immer in der Projektdatei ab und nicht in irgendwelchen initialization-Abschnitten von Units. So um die Ecke kann ich gar nicht denken :mrgreen: |
Re: nonVCL Programm nur einmal starten
Ja, is´ ja auch meine Rede. ;) Aber ich zitiere mal:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz