IR
irwinrodriguez.dev
Zurück zur Dokumentation

FoxCore

FoxCore.Runtime nimmt lange Arbeit vom Hauptthread von Visual FoxPro. Jede Aufgabe startet ihren eigenen VFP-Prozess, das Skript wird hineingegeben, das Ergebnis eingesammelt und der Prozess geschlossen: VFP bleibt einfädig, es gibt einfach mehrere VFP. Die Anwendung steht währenddessen nicht still, und N Aufgaben laufen gleichzeitig.

Das gehört früh gesagt, weil es Enttäuschungen erspart: FoxCore macht Code nicht schneller. Was 40 Sekunden dauert, dauert weiter 40 Sekunden. Anders ist, dass es nicht blockiert, dass Sie Fortschritt zeigen und abbrechen können und dass mehrere gleichzeitig hineinpassen. Und einen Worker zu starten kostet zwischen einer Zehntelsekunde und drei Sekunden: eine Aufgabe von 200 ms ist also keine Kandidatin, der Start kostet mehr als die Arbeit.

In diesem Abschnitt

  • Installation: Voraussetzungen, der Installer und die Registrierung in beiden Sichten.
  • Erste Schritte: Ihre erste Aufgabe in einem anderen Prozess, in weniger als fünf Minuten.
  • Erweiterte Muster: Der Stapel, der große Stapel, Fortschritt mit Abbruch, Handler und die Tafel.
  • API-Referenz: Die sechs COM-Typen, Member für Member, und was es nicht gibt.
  • Beispiele: Drei vollständige Programme, genau so, wie sie laufen.
  • Lizenzierung: Eine Lizenz pro Unternehmen, was sich in 3.4.0 geändert hat und wie freigeschaltet wird.

Was es leistet

  • Führt denselben VFP-Code unverändert in einem anderen Prozess aus: mit Ergebnis zurück, Fortschritt, Abbruch, Frist und deterministischem Ende
  • MaxWorkers von 1 bis 64 gleichzeitigen Prozessen; voreingestellt min(Kerne, 8)
  • Fortschritt und Meldungen aus der Aufgabe heraus mit runtime.Progress(), gelesen mit GetProgress() und GetProgressMessage(), ganz ohne Pumpen
  • Kooperativer Abbruch: die Aufgabe fragt in jeder Schleifenrunde runtime.IsCancelled()
  • Eine Frist je Aufgabe; läuft sie ab, endet die Aufgabe als TimedOut und der Worker stirbt
  • Vollständige Isolation: der Worker sieht Ihre Variablen nicht, Ihre Arbeitsbereiche nicht, Ihre SET-Einstellungen nicht und Ihre Cursor nicht. Er startet sauber und öffnet selbst, was er braucht
  • Der Worker kann mit Call() in den Host zurückrufen, und beide Seiten teilen sich über GetValue() und SetValue() eine Tafel
  • Eingefrorener COM-Vertrag: sechs Typen, und Member wachsen nur am Ende
Was es nicht gibt, und wonach zu suchen sich nicht lohnt Es gibt kein Wait und kein WaitAll (das Muster ist die Schleife mit Pump()), keine Ereignisse OnComplete / OnFailed, kein Task-Objekt und keine FoxCoreClass: das war die klassische Engine, eine andere Produktlinie. Die sechsundzwanzig kursierenden example*.prg gehören zu ihr und gelten hier nicht.

Voraussetzungen

KomponenteVoraussetzung
Visual FoxProVFP 9.0 SP2, registriert als VisualFoxpro.Application.9. Welcher Prozess als Worker dient, lässt sich mit WorkerProgId ändern
WindowsWindows 10 oder 11
.NET Framework4.8
COM-RegistrierungMit dem 32-Bit-RegAsm (Pflicht: nur dorthin schaut vfp9.exe) und, seit 3.4.0, zusätzlich mit dem 64-Bit-RegAsm. Das erledigt der Installer
Eine Lizenz pro Unternehmen, und ohne Verbindung FoxCore wird als eine Lizenz pro Unternehmen zu 299 € verkauft, ohne Plätze zu zählen. Sie ist keine Datei, sondern ein JWT, das Sie im Code an Activate() übergeben, und sie wird lokal geprüft, ohne dass ein Server gefragt wird. Seit 3.4.0 wird sie auch außerhalb der IDE verlangt, in der .exe oder .dll, die Sie ausliefern. Ohne gültige Lizenz läuft der Lebenszyklus weiter (Attach, Ping, Shutdown), aber Aufgaben entstehen als Failed. Veröffentlichte Version: 3.4.2.