Thomas Mirke: Steuerung von Prozessen

Hallo, liebe Forum-Fans,

ich habe folgendes kleines Problem:

Ein Programm erzeugt eine js-Datei (=Prozess 1).
Eine HTML-Seite wird geladen und liest die js-Datei aus Prozess 1 ein (=Prozess 2).

Beide Prozesse können nicht direkt kommunizieren, da es sich 1. um eine Windows-exe handelt und 2. um eine HTML-Seite.

Wenn das Programm mit dem Schreiben noch nicht fertig ist, wird die js-Datei fehlerhaft, weil unvollständig, eingelesen. Wie kann ich Prozess 2 dazu überreden, auf Prozess 1 zu warten?

Kennt jemand eine Möglichkeit aus Javascript zu prüfen, ob eine externe js-Datei geöffnet ist bzw. gerade noch beschrieben wird? Vielleicht könnte ich diese Datei auch sperren / locken, wenn es möglich wäre, den Dateistatus einer externen js-Datei mit Javascript zu ermitteln?

Die im Forum früher diskutierten Möglichkeiten, mit einer Variable geladen=false zu arbeiten, die dann in dere js-Datei auf true gesetzt wird, hilft in diesem Fall nicht. Denn es kommt ja zu einem LFZ/Syntaxerror, wenn die Prozesse sich überschneiden (da zum Zeitpunkt X möglicherweise die js-Datei noch gar nicht "fertig" ist.

Eine lange Wartezeit fest vorzugeben, die auch die dicksten Fälle abfängt, erscheint mir wenig elegant, wenn auch zur Not sicher, wenn mir (und Euch?) nix Schickeres einfallen sollte.

Tschau, Thomas

  1. Hallo Thomas,

    ich antworte mir mal selbst, da das Problem offenbar etwas abseitig ist (?), kann keiner was dazu sagen.

    Kernproblem ist, dass Prozess 1 (Schreiben der js-Datei) unterschiedlich lange dauern kann. Daher ist ein fester Startzeitpunkt für Prozess 2 nicht über einen festen Timer möglich.

    Vielleicht könnte ich es einmal über eine Javascript onerror-Routine versuchen. Wenn der Fehler auftritt, müsste die externe js-Datei dynamisch erneut eingelesen werden.

    Oder: Prozess 1 schreibt eine Angabe über seine voraussichtliche Länge in eine weitere externe js-Datei, die vor Beginn von Prozess 2 vom Browser eingelesen wird. Die Angabe bestimmt dann die Länge eines timeout, welcher dann (zzgl. einer Sicherheitstoleranz) Prozess 2 startet.

    Tschö

    1. Hallo Thomas,

      damit du nicht immer Selbstgespräche führen musst hier mein Tip. Ich weiss nicht, od ich dein Problem richtig begriffen habe, aber stell dir mal folgendes vor:
      Eine HTML-Seite liest ein externes JS ein. Nach einer gewissen Zeit, oder auch per Klick wird ein CGI aufgerufen, dass die JS-Datei aktualisiert,
      und _dann_ als Antwort die selbe HTML-Seite zurück liefert, die sich das externe JS holt. Damit ist ein Refresh erledigt.
      Solltes du mit dem Gedanken spielen, das der Server den Browser zum neu laden der Seite auffordert, geht das zumindest im Intranet
      mit einem Java-Applet, das sich über RMI beim Server anmeldet. Mit RMI wird dann bei Bedarf das Applet aufgefordert die HTML-Seite
      neu vom Server zu holen. Wie gesagt funktioniert im Intranet. Im Internet dürftest du ein Problem haben eine RMI-Verbindung aufzubauen und zu halten.

      Chiau Pit

      1. Hallo Pit,

        dankeschön!
        Trotzdem:

        Eine HTML-Seite liest ein externes JS ein.

        Problem: Wann ist das externe js fertig geschrieben? Wenn es zu früh eingelesen wird, dann ist es "unfertig" und es kommt zu LFZ's.

        Nach einer gewissen Zeit, oder auch per Klick wird ein CGI aufgerufen, dass die JS-Datei aktualisiert,

        und _dann_ als Antwort die selbe HTML-Seite zurück liefert, die sich das externe JS holt. Damit ist ein Refresh erledigt.

        Das müsste ich mal ausprobieren, ist ein anderer Ansatz, als ich ihn hatte, weil ich ja mit einer exe arbeite.

        Da es zum Wochenende so schön menschelt, hier mein Problem als Gleichnis:

        Im australischen Busch sitzt ein Farmer vor einem Radio.
        In Houston wird eine Rakete gestartet. Die Rakete setzt einen Satelliten im Weltall aus. Der Satellit beginnt Nachrichten zu funken. Wie erfährt der Farmer, wann er das Radio einschalten muss, um die Nachricht zu erfahren, dass in Houston eine Rakete gestartet wurde, die einen Satelliten im Weltall ausgesetzt hat, der zu funken begann, dass ...? Oder wie schaltet der Satellit das Radio an?

        =(:-]=

  2. Hi,

    Wenn das Programm mit dem Schreiben noch nicht fertig ist, wird die js-Datei fehlerhaft, weil unvollständig, eingelesen. Wie kann ich Prozess 2 dazu überreden, auf Prozess 1 zu warten?

    Du kannst Prozeß 1 überreden, die Datei erst fertig zu erstellen und *danach* auf den von Prozeß 2 erwarteten Namen *umzubenennen* (was für Deine Zwecke als unteilbare Operation gelten kann).
    Auf diese Weise bekommt Prozeß 2 die Datei entweder vollständig - oder gar nicht (was er ggf. abfangen kann).

    mfG - Michael