Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge

BatchFIle-Synchronisation

Mdl / 15 Antworten / Flachansicht Nickles

Der Hintergrund der folgenden Frage ist der, dass ich es unter Windows XP letzlich noch immer nicht geschafft habe, dass ein im Autostart-Ordner eingetragenes Programm genau einmal gestartet wird (und nicht mehrmals). In meinem Fall will ich ein Batchprg. eben genau einmal starten. Ich kann nicht recht verstehen, wieso das (bei mir) so ist, aber - nunja, dann bastelt man eben einen Workaround...

Dieser Workaround sieht bei mir in etwa so aus.
1 Falls Laufwerk Z: definiert ist => Batchfile beenden
2 SUBST Z:
3 ... ; weitere Befehle

Da SUBST sich auf das ganze System auswirkt funktioniert das i.d.R. auch ganz gut.
Es gibt aber einen Schwachpunkt, der in letzter Zeit des öfteren Auftritt.

Befindet sich Aufruf A am Ende der Zeile 1 und Aufruf B ist jetzt am Zug, dringt auch Aufruf B zu Zeile 2 vor, d.h. Aufruf A und B durchlaufen letztlich alle Zeilen. Mein selbstgestrickter Mechanismus funktioniert also nicht immer...

?????
? Weiß jemand eine Möglichkeit wie man das verhindern kann.

Vielen Dank,

Mdl

P.S. Ich finde es eher eine (Batch-)Programmierkniffelei als ein XP-Problem, deshalb lege ich es unter diesem Forum ab...

bei Antwort benachrichtigen
Mdl PaoloP „also der autor eines programms entscheidet ob er es so anlegen möchte das seine...“
Optionen

> das sinnvollste ist der sogenannte gemeinsam genutze speicher.
ist relativ simpel wenn man wirklich nur ein paar primitive variablen sharen will.

????????
? Ok. Wie geht das in C/C++?

Wie muss ich z.B. folgenden Code erweitern, dass die globale Variable MySharedVal vom Typ 'Zeiger auf struct MySharedStruct' (MySharedStruct könnte eine beliebig definierte Struktur im Header-File sein) für alle Instanzen (Aufrufe) der Applikation geteilt wird.

extern struct MySharedStruct *MySharedVal; // UNVOLLSTÄNDIG...

Ideal wäre natürlich wenn es unter C/C++ ein Schlüsselwort gäbe, mit dem dies bewerkstelligt werden könnte.


Der Code wäre dann vermutlich am Programmanfang irgendwie so aus:

if(MySharedVal==NULL)
MySharedVal=new MySharedStruct;

Neben der Tatsache, dass die Adresse von MySharedVal in allen Instanzen des erzeugten EXE-Files dieselbe ist (oder zumindest deren Wert, d.h. der Zeiger), dürfte (und sollte) der von der ersten Instanz angeforderte Speicher erst wieder freigegeben werden, wenn die letzte Instanz des EXE-Files beendet wird.

Vielen Dank,

Mdl

bei Antwort benachrichtigen