ich habe ein Clipperprogramm - nennen wir es "Mutter" - das mittels RUN-Befehl nacheinander mehrere andere Clipper-Programme - nennen wir sie "Töchter" - aufruft. Unter DOS funktioniert das super, in der cmd-Box unter Windows XP und NT jedoch scheint die Anzahl der möglichen RUN-Aufrufe limitiert zu sein: Drei Töchter können gut aufgerufen werden, bei der vierten Tochter erhalte ich dann aber die Fehlermeldung:
DOS/16M error [6] Insufficient memory to load program
Soll heißen: Die vierte Tochter, und alle weiteren, lassen sich nicht mehr starten, die Mutter ist aber noch aktiv. Es sieht also danach aus, als würde bei Beendigung einer Tochter diese nicht allen Speicherplatz wieder freigeben. Wenn ich mir aber nach jedem Tochter-Aufruf den Speicherplatz (mittels MEM /C) anzeigen lasse, so erhalte ich nach jeder Tochter exakt dieselben Zahlen.
Hat jemand eine Idee, wie ich diesen Fehler verhindern kann?
Testprogrammcode:
Code: Alles auswählen
LOCAL counter := 0
LOCAL prgname := "TEST1" //Tochter-Testprogramm heißt TEST1.EXE
DO WHILE .T.
counter++
RUN (prgname) //Fehler bei counter=4
**SWPRUNCMD(prgname,0,"","") //Alternative, macht keinen Unterschied
IF ALERT(prgname+" "+LTRIM(str(counter,5)), {"WEITER", "ENDE"}) # 1
EXIT
ENDIF
RUN ("MEM /C") //Zeigt nach jedem Durchlauf die exakt gleichen Werte an...
inkey(0) //auf Tastendruck warten
ENDDO
- Das Problem tritt auf, egal welche Clipper-Exen ich als Töchter teste; die Anzahl der möglichen RUN-Aufrufe variiert dabei geringfügig.
- Das Problem tritt auch auf, wenn Mutter und Töchter simpelste Testprogramme sind, die sonst nichts tun.
- Das Problem tritt unabhängig davon auf, ob die Töchter mit RUN oder mit SWPRUNCMD() gestartet werden.
- Das Problem tritt unabhängig davon auf, ob die Mutter mit BLINKER oder EXOSPACE gelinkt wurde.
- Das Problem tritt sowohl auf, wenn die Töchter mit BLINKER, als auch wenn sie mit EXOSPACE gelinkt wurden; allerdings lassen BLINKER-Töchter deutlich mehr RUN-Aufrufe zu.
- Im Echteinsatz bin ich wegen eines anderen Problems gezwungen, EXOSPACE (und nicht BLINKER) zu verwenden.
- Beim Linken mit EXOSPACE wird OPTEDIT -EXTRAMIN 16384 -BUFFER 16384 -TSSIZE 512 [Dateiname].EXE benutzt.
- Clipperversion: 5.3
Mit besten Grüßen
Martin Komnick