Ja, die fehlende Deklaration als Property war's, da war ich beim Lesen nicht
aufmerksam genug. Und jetzt klappt's auch. Besten Dank.
Und dennoch, um die Funktionszusammenhänge wirklich zu verstehen (und um
dann auch selbstständig handeln zu können), wünschte ich mir, dass 'mal
jemand über all diese tieferliegenden Dinge, die auch im User's Guide nicht
mehr erklärt werden, in einer Zusammenschau veröffentlicht. Es muss ja nicht
gleich ein Buch sein. Vielleicht tät's auch ein Wiki mit systematischem
Inhaltsverzeichnis, vielleicht können dann alle Verständigen, jeder ein
Stückchen, daran mitschreiben.
Wie ich sehe, komme ich jetzt mit einer ganzen Reihe von Fragen, die eine
Etage tiefer in die Funktionsweise von Programmen kurz vor
Betriebssystem-Ebene gehen. Da sind z.B.:
CriticalSection, Semaphore, Mutex
interfaces, Shell, API
Dabei geht es auch immer darum, dass so Leser wie ich sich eine bessere
modellhafte Vorstellung davon entwickeln können, was eigentlich im Computer
passiert, um mehr Selbstständigkeit entwickeln zu können UND NICHT BEI ALLEM
DIE NEWS-GROUP FRAGEN ZU MÜSSEN!
also, einstweilen beste Grüße, Christian Hahn.
----- Original Message -----
From: "MGE Lists" <li...@pdf-konverter.de>
To: <realbasic-nug.de@lists.realsoftware.com>
Sent: Monday, March 08, 2010 11:45 AM
Subject: Re-2: Programm nicht 2 Mal starten
Christian,
zum Beenden des Programms. HastDu eventuell kein "DefaultWindow" in der App
eingestellt und
irgendwo "App.AutoQuit = True" eingebaut?
Zum Mutex:
Wie ich es im Beispiel geschrieben hatte,
Du musst den Mutex in der App.Klasse als
Property / Eigenschaft definieren und nicht
im Open.Event.
Wenn Du "dim meinMutex as Mutex" im Open.Event definierst,
wird der Mutex automatisch von RB geschlossen "leave" wenn
"Open.Event" abgearbeitet ist!
Du willst ja aber erreichen, das der Mutex so lange existiert,
bis das Programm selbst geschlossen wird. Das sollte und macht RB
automatisch. Falls nicht, kannst Du im App.Close Event folgenden Code
einfügen.
// App.Property / Eigenschaft
myMutex As Mutex
// App.Open Event
myMutex = New Mutex( ExecutableFile.Name )
if Not myMutex.TryEnter then
//
MsgBox( "Eine Instanz des Programm läuft bereits!" )
//
Quit
end if
// App.Close Event
if myMutex <> Nil then
myMutex.Leave
end if
Grüße
Thomas Nauck
-------- Original Message --------
Subject: Re: Programm nicht 2 Mal starten (07-Mrz-2010 17:11)
From: Christian Hahn <christian.h...@snafu.de>
To: li...@pdf-konverter.de
Hallo,
was ist jetzt passiert?
mit folgendem Code in App.Open startet das Programm, msgbox "läuft" kommt
auf und dann beendet sich das Programm. Eine zweite Instanz des Programms
wurde noch gar nicht versucht zu starten.
Aber jetzt! Nach Entfernung des codes, Absuchen des Windows Task-Manager
und
auch Neustart des Rechners schließt sich das Programm immer noch (obwohl
der
Code gar nicht mehr vorhanden ist).
dim meinMutex as Mutex
meinMutex = New Mutex( "ZensurenEingabe_19_Client.exe" )
if Not meinMutex.TryEnter then
msgbox "kein zweiter Programmstart"
Quit
else
msgbox "läuft"
end if
Das ist mir doch noch zu viel Rätselraten, die online-Hilfe und User's
Guide
Informationen reichen noch nicht zu meinem Verständnis.
Bisher verstehe ich: Die classes Semaphore, CriticalSection und Mutex
haben
etwa alle die gleiche Absicht, sie reservieren die Benutzung einer sog.
resource für einen bestimmten anderen process.
Oder muss man sagen, ein process schützt sich vor der Benutzung durch
einen
anderen process mithilfe eines Semaphore?
Davon hängt für mein Verständnis ab, wo die Klasse definiert wird und von
wem die Befehle enter und leave gesetzt werden.
Was alles kann eine resource sein?
Besonders im Falle des Mutex. Was an dem Programm wird geschützt bzw.
welche
resource versucht ein weiterer Progammstart zu benutzen?
einstweilen beste Grüße, Christian Hahn.
----- Original Message -----
From: "MGE Lists" <li...@pdf-konverter.de>
To: <realbasic-nug.de@lists.realsoftware.com>
Sent: Saturday, March 06, 2010 6:52 PM
Subject: Re: Programm nicht 2 Mal starten
Hallo Christian,
dafür nimmst Du am besten einen Mutex der als
Property in der App.Klasse definiert ist und
versuchst ihn im App.Open Event zu setzen.
Als Property, damit er während der kompletten
Programmlaufzeit erhalten bleibt.
//
myMutex = New Mutex( "Programmname" )
if Not myMutex.TryEnter then
//
Quit
end if
Grüße
Thomas
-------- Original Message --------
Subject: Programm nicht 2 Mal starten (06-Mrz-2010 17:10)
From: Christian Hahn <christian.h...@snafu.de>
To: li...@pdf-konverter.de
> Hallo, ich glaube mich zu erinnern, dass wir das hier schon 'mal hatten,
> aber ich finde es nicht wieder.
> Wie kann man verhindern, dass ein Programm nicht 2 Mal gestartet wird,
> oder
> genauer, wie kann man feststellen, ob ein Programm schon gestartet
> wurde?
> beste Grüße, Christian Hahn.