Seite 1 von 2
Festellen ob schon eine Instanze eines Programm läuft?
Verfasst: 30. April 2008 11:03
von grisu1972
Hallo Leute,
gibt es eine Möglichkeit mittels QT festzustellen ob schon eine Instanz eines Programms läuft?
Lieber keinen Workaround über das Dateisystem oder ähnliches!
Grüsse Carsten
Verfasst: 30. April 2008 11:21
von grisu1972
Hallo Leute,
kann man dazu QAxFactory benutzen, ist das sinnvoll?
Verfasst: 30. April 2008 11:32
von Sephral
Hallo,
- * QtLockedFile (Qt Solution)
* QtSingleApplication (Qt Solution)
* Process Status API (Windows), schauen ob der Prozess läuft
* Ganz trivial: Öffne einen Socket und prüfe beim Programmstart ob dieser noch auf ist bzw ob du darauf binden kannst.
* Netzwerkweit: Verwende einen UDP-Broadcast auf den laufende Instanzen antworten
Mehr fällt mir gerade nicht ein
Ciao,
Sephral
Verfasst: 30. April 2008 11:40
von grisu1972
Hallo,
bei mir kommt nur QtSingleApplication in Frage. habe auch schon im QTAssistenten danach gesucht, ich finde keinen Eintrag
Das Problem ist:
a. Netzwerk ist pfui, wird jede Woche gescannt, brauch ich gar nicht zu versuchen.
b. das Programm liegt auf einen Server und kann von verschiedenen Clients gestartet werden. Daher ist Dateibasierend auch nichts zu machen.
Grüsse Carsten
Nachtrag:
ich habe die kommerzielle Version von QT. Ich hätte erwartet das es in dem QT Assistenten zumindest beschrieben wird!
Werde es mal versuchen!
Verfasst: 30. April 2008 11:53
von patrik08
suche mal " qtsingleapplication.cpp " " qtsingleapplication.h "
bei
http://www.google.com/codesearch an 2° stelle must halt fuer qt4 portieren.... zum downloaden falsch .... kopieren ja..
Verfasst: 30. April 2008 11:54
von Sephral
Hallo,
QtSingleApplication ist Teil des Qt Solutions-Pakets (kostet extra).
http://trolltech.com/products/qt/addon/ ... plication/
Ciao,
Sephral
Verfasst: 30. April 2008 12:10
von grisu1972
Also:
- das Paket habe ich nicht!
- Windows API will ich nicht!
- Sockets darf ich nicht!
bleibt QtLockedFile! Wollte ich auch nicht, scheint aber die angemessene Lösung!
Werde wohl das lokale Logfile benutzen um festzustellen ob die Applikation läuft!
Danke für die Hinweise, finde ich gut!
Verfasst: 30. April 2008 12:34
von Christian81
WindowsApi geht nicht? Ein globaler named Mutex und fertig - genau das was (denke ich) QtSingleApplication auch macht.
Das Du das Paket nicht hast ist klar - wurde ja auch schon zweimal gesagt warum...

Verfasst: 30. April 2008 12:45
von Sephral
Christian81 hat geschrieben:WindowsApi geht nicht? Ein globaler named Mutex und fertig - genau das was (denke ich) QtSingleApplication auch macht.
Ist zwar schon ne Weile her, aber ich glaube QtSingleApplication arbeitet lediglich mit Windows-Messages, die zwischen Fenstern mit dem selben Namen ausgetauscht werden. Mag aber sein, dass das inzwsichen anders läuft, hab mir die letzten Updates nicht genauer angeschaut.
Ciao,
Sephral
Verfasst: 30. April 2008 18:46
von upsala
Außerdem hatten wir das Thema in der Vergangenheit des öfteren => Forumssuche
Verfasst: 29. Mai 2008 11:55
von grisu1972
Mir ist "globaler named Mutex" nicht klar, wie kann man aus einer Applikation heraus auf die Mutex einer anderen (globalen) Mutex zugreifen oder ist es gar keine QMutex sonder irgendetwas mit WinAPI?
Verfasst: 29. Mai 2008 12:26
von Christian81
Wenn ich sage das es nur unter Windows geht wird es wohl WinAPI sein...
Verfasst: 29. Mai 2008 12:36
von RHBaum
versteh nicht deine "Abneigung" vor der winapi ....
QT intern macht naturgemaess sehr regen gebrauch von der winapi, sonst waer gar keine gui/netzwerk etc moeglich.
Es gibt nun mal Dinge, die kann nur das BS ...
Plattformunabhaengigkeit heisst auch nicht, das Du keine systemspezifischen besonderheiten verwendest, sondern das du fuer alle Plattformen eine API zur verfuegung stellst, die sich gleich verhaelt.
verwende die winapi .... kapsel die funktionalitat in ner Klasse, und check per makro die plattform ab. wenn du spaeter auf ne andere plattform migrierst, schreibe den zweig fuer das andere os, nutze dessen besonderheiten dafuer ... wieder per makros auf dieses BS beschraenkt ... wenn mal spaeter alle OS implementiert hasst, ist deine Klasse Plattformunabhaengig.
das abchecken geht mit allen BS Objecten, die fuers IPC gedacht sind und ne "named" version haben. Das heisst ein prozess legt das ding an ueber nen eindeutigen namen, und der 2.te prozess kriegt ne (fehler)meldung wenn er versucht mit dem selben namen anzulegen.
Das geht mit Mutex (unter windows heissen die critical sections), semaphoren, pipes, events, shared memory .....
selbst die wahl des mittels wuerd ich vom BS abhaengig machen ...
linux kannst viel auf filebene machen, grad durch das /var system ...
unter windows eher unelegant, da koenntest andere dinge wiederum besser nutzen als unter linux ...
Ciao ...
Verfasst: 29. Mai 2008 12:43
von PeterLustig
Ab 4.4 kann man dies auch über Shared Memory lösen.
Verfasst: 29. Mai 2008 16:10
von patrik08
PeterLustig hat geschrieben:Ab 4.4 kann man dies auch über Shared Memory lösen.
Da der link mit beispiel:
http://wiki.qtcentre.org/index.php?titl ... pplication
falls man sucht im forum " Shared Memory "