Sprung zum Seitenende Struktur Themen A...Z Titel << >>

CXI-Basis-Programmierreferenz / Version 2 / Unterstützte Systeme / DOS /

Externe Variablen unter DOS

[DOS] [Keine Portabilität!] Externe Variablen unter DOS

Die DOS-Version definiert mehrere globale Objekte, die das Verhalten der CXI-Bibliothek in Fehlersituationen bestimmen und zur Optimierung der Speicherverwaltung benutzt werden können. Die in den folgenden Absätzen beschriebenen Variablen werden automatisch deklariert, wenn CXIB.H eingebunden ist. Die externen Variablen können auf folgende Weise geändert werden, beide Möglichkeiten können kombiniert werden:

- 1. Die entsprechende Variable wird in einem Modul des Programms in der unten angegebenen Form neu deklariert und initialisiert (!), dadurch wird die Änderung bereits am Programmstart aktiv. Sind Linker-Warnungen aktiviert, führt dies zur Meldung, dass die Variable doppelt definiert sei; diese Warnung kann ignoriert werden. Wird versucht, eine der Variablen auf diese Weise unter einem anderen System als DOS zu überschreiben, wird dies toleriert und ignoriert.

- 2. Ist die Wirkung am Programmstart nicht erwünscht oder nicht notwendig, so ist es auch möglich, den Variablen im Laufe des Programms neue Werte zuzuweisen. Wird diese Zuweisung unter einem anderen System als DOS versucht, ergibt sich ein Compile-Fehler.

[C] extern int cxiFlagVmMinimumCoreLeftKB = 128;

Die Variable cxiFlagVmMinimumCoreLeftKB gibt die Größe des Heaps in KB an, die von der virtuellen Speicherverwaltung (VM, siehe vorherige Seite) nicht verwendet werden darf:

cxiFlagVmMinimumCoreLeftKB = 0:
VM verwendet den gesamten Heap, erst wenn dort kein Speicher mehr verfügbar ist, wird nach XMS oder Swapdatei ausgelagert.

cxiFlagVmMinimumCoreLeftKB = 128:
VM verwendet solange Heapspeicher, bis coreleft() < 128KB wird. Der Wert 128 ist die Voreinstellung für die Variable cxiFlagVmMinimumCoreLeftKB am Programmstart, wenn diese Variable nicht überschrieben wird.

cxiFlagVmMinimumCoreLeftKB = -1:
Dieser spezielle Wert bedeutet, dass VM keinen Heapspeicher verwendet, sondern jeden Block nach XMS oder Swapdatei auslagert.

Der Wert von cxiFlagVmMinimumCoreLeftKB kann jederzeit geändert werden. Die Einstellung wirkt sich auf alle neu angelegten Objekte (Knoten) aus, bestehende Objekte werden durch die Änderung nicht beeinflusst. Besitzt die verwendete Maschine kein XMS und treten Speicherprobleme auf, so ist das Setzen von cxiFlagMemoryToFile (siehe unten) die schnellere Methode, die Verwendung einer Auslagerungsdatei benötigt jedoch weniger Plattenplatz.

[C] extern int cxiFlagMemoryToFile = 0;

Die Variable cxiFlagMemoryToFile legt fest, ob Objekte vom Typ CxiTreeMem im Speicher oder in einer temporären Datei abgelegt werden sollen:

cxiFlagMemoryToFile=0 (Vorgabe):
Die Daten werden im Speicher (auf dem Heap oder über VM) abgelegt.

cxiFlagMemoryToFile=1:
Die Daten werden in einer temporären Datei (CxiTreeFile mit Option "t") abgelegt.

Diese Variable kann eingesetzt werden, um die bei DOS üblichen Speicherplatzprobleme zu umgehen, der Zugriff auf temporäre Dateien kann jedoch den Programmablauf erheblich verlangsamen. Ab Version 2.05 steht zur Speicheroptimierung unter DOS auch die VM-Verwaltung zur Verfügung (siehe vorherige Seite). Es ist möglich, den Wert der Variablen cxiFlagMemoryToFile während der Laufzeit des Programms zu ändern. Die Änderung wirkt sich auf alle anschließend erzeugten Objekte aus, bestehende Objekte werden nicht beeinflusst.

[C] extern unsigned int cxiFlagMinimumStackSize = 768;

Die Variable cxiFlagMinimumStackSize legt die minimale Größe des Stacks in Byte fest. Wird diese Reserve unterschritten, bricht das Programm mit einer Fehlermeldung ab. Das CXI-System benötigt mindestens 256 Byte Platz; für das System und für Hardware-Interrupts sind 512 Byte zu reservieren. Dies ergibt die Vorgabe von 768 Byte. Wenn diese Variable überschrieben wird, darf der Wert 768 nicht unterschritten werden. Die Anfangsgröße des Stacks wird mit der Variablen _stklen (in der Laufzeit-Bibliothek von Borland) festgelegt. Benötigt das Anwendungsprogramm große Puffer auf dem Stack oder werden viele Funktionen geschachtelt, so kann es passieren, dass die gesamte Reserve verbraucht ist und der Stack tatsächlich überläuft, bevor eine CXI-Zugriffsfunktion den Fehler bemerken kann. In diesem Fall sollte cxiFlagMinimumStackSize erhöht werden.

[C] extern int cxiFlagAllocErrorAbort = 0;

Die Variable cxiFlagAllocErrorAbort bestimmt das Verhalten bei Speicherfehlern (z.B. nicht genügend Speicher):

cxiFlagAllocErrorAbort=0 (Vorgabe):
Nur Rückgabe des Fehlercodes

cxiFlagAllocErrorAbort=-1:
Ausgabe einer Fehlermeldung und Rückgabe des Fehlercodes

cxiFlagAllocErrorAbort=1:
Ausgabe einer Fehlermeldung und Abbruch des Programms.

Es ist möglich, den Wert der Variablen cxiFlagAllocErrorAbort während der Laufzeit des Programms mit sofortiger Wirkung zu ändern.

[C] extern long int cxiFatalErrorCount = 0;

Der Wert von cxiFatalErrorCount wird von CXI bei jedem Speicherfehler um 1 erhöht. Auf diese Weise kann ein Programm auch bei cxiFlagAllocErrorAbort==0 feststellen, ob solche Fehler aufgetreten sind. Der Wert dieser Variablen kann auch vom Anwendungsprogramm geändert werden (z.B. auf 0 zurückgesetzt werden). Wird diese Variable nicht überschrieben, ist sie am Programmstart mit 0 initialisiert.

Wo Zugriffe auf globale Variablen nicht möglich oder nicht gewünscht sind, können die folgenden (nur unter DOS verfügbaren!) Funktionen benutzt werden.

Abfrage der Variablen:

long gcxiFatalErrorCount (void);
int gcxiFlagAllocErrorAbort (void);
int gcxiFlagMemoryToFile (void);
unsigned int gcxiFlagMinimumStackSize (void);
unsigned int gcxiFlagVmMinimumBlockSizeB (void);
int gcxiFlagVmMinimumCoreLeftKB (void);

Ändern der Variablen:

void scxiFatalErrorCount (long newv);
void scxiFlagAllocErrorAbort (int newv);
void scxiFlagMemoryToFile (int newv);
void scxiFlagMinimumStackSize (unsigned int newv);
void scxiFlagVmMinimumBlockSizeB (unsigned int newv);
void scxiFlagVmMinimumCoreLeftKB (int newv);

Siehe auch:
CXI unter DOS


[i] CXI-Basis-Programmierreferenz
Version 2.10 72 (1014-001), erstellt am 15. April 2000
Textseite 16 von 855, Thema 8233 (SystemDOSv)
[c] Copyright (c) 1996-2000 by TeraConnect GmbH

Sprung zum Seitenanfang Struktur Themen A...Z Titel << >>