Laufzeitbibliothek VFP7R.DLL
Vfp7r.dll kann von den folgenden, von Visual FoxPro generierten Anwendungsarten verwendet werden:
- Verteilte Anwendungen (EXE-Dateien)
- Aktive Dokumente (APP-Dateien)
- Prozessexterne Server (EXE-Dateien)
- Prozessinterne Server (DLL-Dateien)
Diese Laufzeitbibliothek ist die primäre Laufzeitbibliothek, die von Visual FoxPro für die meisten Anwendungsarten verwendet wird.
Die Visual FoxPro-Laufzeitbibliothek vfp7r.dll kann nicht von mehreren prozessinternen DLL-Automatisierungsservern gleichzeitig eingesetzt werden. Jede prozessinterne DLL verwendet nun eine eigene Instanz der Laufzeitbibliothek vfp7r.dll. Die folgenden Regeln bestimmen, wie prozessinterne DLLs die Laufzeitbibliothek vfp7r.dll verwenden:
Die zuerst aufgerufene prozessinterne DLL verwendet die Laufzeitbibliothek vfp7r.dll exklusiv. (Diese Laufzeitbibliothek wird abhängig vom verwendeten Betriebssystem üblicherweise im Ordner System oder System32 installiert.)
Wenn die Laufzeitbibliothek vfp7r.dll bereits exklusiv von einer prozessinternen DLL verwendet wird, wird auf der Festplatte eine umbenannte Kopie von vfp7r.dll erstellt und für jede aufgerufene prozessinterne DLL in den Speicher geladen. Der Laufzeitbibliothek vfp7r.dll wird ein Name zugewiesen, der auf der prozessinternen DLL basiert. Wird beispielsweise eine prozessinterne DLL mit dem Namen Myserver.dll aufgerufen, so wird eine Kopie von vfp7r.dll in myserverr.dll umbenannt (beachten Sie das an den Namen angefügte "r") und für die prozessinterne DLL in den Speicher geladen. Dies kann ebenfalls erfolgen, wenn ein Visual FoxPro-EXE-Server eine Instanz eines DLL-Servers erstellt – eine Situation, in der beide Server von demselben Prozess aus dieselbe Laufzeitbibliothek verwenden würden.
Die Visual FoxPro-Laufzeitbibliotheken werden nur für prozessinterne DLLs umbenannt, die innerhalb desselben Prozesses ausgeführt werden. Dies bedeutet, dass zwei separate Clients, die jeweils in ihrem eigenen Prozess ausgeführt werden, zwei unterschiedliche prozessinterne Visual FoxPro-DLLs laden können, ohne dass die Laufzeitbibliothek umbenannt wird. In diesem Fall verwenden beide prozessinternen Visual FoxPro-DLLs die Laufzeitbibliothek vfp7r.dll, da die Clients in separaten Prozessen laden.
Mehrere Automatisierungsserver (die mit der OLEPUBLIC-Klausel im DEFINE CLASS-Befehl erstellt wurden) in einer einzigen prozessinternen DLL verwenden gemeinsam dieselbe Instanz der Laufzeitbibliothek vfp7r.dll. In diesem Fall ist es möglich, dass die Automatisierungsserver sich gegenseitig beeinflussen, indem sie als PUBLIC deklarierte Speichervariablen gemeinsam verwenden, dieselben SET-Befehle festlegen usw., falls sie in einem gemeinsamen Thread ausgeführt werden. Achten Sie darauf, dass mehrere Automatisierungsserver in einer einzelnen prozessinternen DLL sich nicht gegenseitig beeinflussen. Einige dieser Konflikte können mit Hilfe der neuen Session-Klasse vermieden werden.
Sie können die Laufzeitbibliothek vfp7r.dll mit prozessinternen DLL-Servern verwenden. Da die Verwendung von vfp7r.dll bestimmten Beschränkungen unterliegt, sollten Sie erwägen, stattdessen die Laufzeitbibliothek vfp7t.dll zu verwenden. Die Laufzeitbibliothek vfp7r.dll bietet keinen vollständigen Schutz für Instanzdaten und globale Daten. Aus diesem Grund wird die gleichzeitige Ausführung von Code durch mehrere Objekte von der Laufzeitbibliothek blockiert. Wenn eines der Objekte Code ausführt, wird die Codeausführung aller anderen Instanzen in eine Warteschlange eingereiht. Sobald das Objekt die Codeausführung beendet, kann ein anderes Objekt in die Laufzeit eintreten, um die Ausführung aufzunehmen (unabhängig davon, ob es sich um eine Eigenschaftszuweisung oder einen Methodenaufruf handelt). Für viele Anwendungsszenarien ist diese Vorgehensweise nicht unbedingt ideal; es gibt jedoch bestimmte Arten von Serveranwendungen, für die dieser Ansatz das optimale Verfahren darstellt.
In einer typischen Microsoft Transaction Server-Anwendung (MTS) werden die Visual FoxPro-DLL-Server in Paketen bereitgestellt, die durch einen einzigen MTS-Prozess dargestellt werden. Für jeden Client, der eine Instanz (OLEPUBLIC) von einem Visual FoxPro-Server anfordert, wird von MTS ein Thread generiert (oder erneut verwendet). Da MTS-Anwendungen häufig in Unternehmen verwendet werden und somit eine hohe Skalierbarkeit aufweisen müssen, besteht die Möglichkeit, dass viele parallele Instanzen gleichzeitig auf den Visual FoxPro-Server zugreifen. Wenn zu einem gegebenen Zeitpunkt nur einem einzigen Client (Instanz) die Codeausführung ermöglicht wird, müssen alle anderen Clients warten. Wird ein Computer mit nur einem Prozessor verwendet, kann diese Vorgehensweise je nach Art und Ausführungszeit der Methoden des Servers optimal sein. Bedenken Sie, dass ein einzelner Prozessor nie mehrere Codezeilen gleichzeitig ausführen kann.
Bei Computern mit mehreren Prozessoren sollten Sie immer die Verwendung der Laufzeitbibliothek vfp7t.dll erwägen, da die verschiedenen Prozessoren gleichzeitig Code für unterschiedliche Objekte ausführen können. Da das Blockierungsverhalten von vfp7r.dll die gleichzeitige Ausführung von Code verhindert, empfiehlt sich in den meisten Situationen die Verwendung von vfp7t.dll.
Siehe auch
Visual FoxPro-Laufzeitbibliotheken | Laufzeitbibliothek VFP7T.DLL | Interoperabilität und das Internet | Überlegungen und Beschränkungen beim Serverentwurf | Skalierbarkeit und Multithreading