Ich habe ein Turbo Pascal 7.0 Programm, welches unter DOS läuft, aber auch noch unter Win98. Dieses Programm kommuniziert mit einem Gerät über V.24. Leider knallt mir unter XP das Multi-Tasking immer dazwischen und die Datenübertragung wird für viele Millisekunden unterbrochen. Dieses stört das Gerät. Wie kann ich den Datenstream durchgängig halten. Am liebsten wären mir Compilerschalter und andere Einstellungen in Windows, da der Quellcode nicht von mir ist und Änderungen daher risikobehaftet.
Ich danke Euch.
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
Die DOS-Emulation von XP ist leider nicht sehr gut. Probier mal die DOSBOX aus (gibt's bei Sourceforge), damit geht's sicher besser.
Hi!
Ne, das dürfte nichts bringen. Das Problem ist hier nicht die generelle Kompatibilität, sondern dass die DOS-Anwendung für eine gewisse Zeit nicht von anderen Programmen unterbrochen werden darf (sie muss exklusiv laufen).
Bis dann
Andreas
Ich hatte mir erhofft, dass sich die hohe Systembelastung, die Emulatoren mit sich bringen, in diesem Fall positiv auf das Problem auswirken könnte. Würde mich interessieren...
Wie soll das denn funktionieren? Wenn die Emulation selbst schon viel Rechenzeit benötigt, dann wird die Anwendung nur noch länger vom Arbeiten abgehalten...
Gruß
Borlander
Hi!
Ich wüsste nicht, dass man soetwas durch Compilerschalter bei Turbo/Borland-Pascal erreichen kann. Der Compiler erzeugt ja generell DOS-Programme und die wissen nichts von der Windowsumgebung, in der sie laufen.
Ich habe überlegt, ob man das über die normale Prozesspriorisierung von XP beeinflussen kann. Im Taskmanager kann man einem Program ja eine andere Priorität zuteilen, bis hin zu Echtzeitfähig, was IMHO bedeutet, dass es nicht mehr unterbrochen wird.
Bis dann
Andreas
Das wäre auch meine erste Überlegung, dem Programm einfach mal eine höhere Priorität zu setzen (und zwar Hoch). Wenn in dem System mehr als eine CPU bzw. mehr als ein CPU-Kern steckt, dann könnte man diese auch (fast) exklusiv (dazu müsste man mal nachsehen ob man irgendwie auch die Zuweisung von Systemdiensten ändern kann) einer CPU zuweisen...
bis hin zu Echtzeitfähig, was IMHO bedeutet, dass es nicht mehr unterbrochen wird.
Also die Priorität Echtzeit scheint zumindest auf Desktop-Windows-Versionen nicht verfügbar zu sein, oder lässt sich zumindest nicht über den Taskmanager festlegen. Ansonsten würde aber die Definition von Echtzeit nichts anderes als eine garantierte maximale Reaktionszeit gewährleisten, wäre interessant wie sich das auf die Prozessbehandlung auswirkt...
Gruß
Borlander
Hallo zusammen,
habe Prio auf Hoch und sogar auf Echtzeit gesetzt. Keine Verbesserung. Echtzeit heißt tatsächlich, dass man danach den Resetknopf drücken muss.
Als Windows-EXE mit VB klappt die Verbindung. Werde nun die beiden Programme laufen lassen und die Datensätze jeweils auf die Festplatte zwischenspeichern und das andere Programm laufend die Platte nach der Datei abfragen. Habe zum Speichern und Abfragen sowie antworten ca. 100-500 ms Zeit, wobei der Datensatz maximal 512 Byte groß ist. Die Menge ist also nicht das Problem, sondern die File-Aktionen. Mal sehen, ob es schnell genug geht. Oder gibt es eine andere Methode, einen String von einer Win-EXE in eine DOS-EXE und umgekehrt zu übermitteln, also ein Datenaustausch zw. zwei Programmen in zwei Prozessen? (klar! es gibt immer die Möglichkeit über Speicher. Bei TP ist es der Heap, den man auch direkt ansprechen kann; aber in Windows hätte ich da Probleme)
Danke für Eure bisherige Mithilfe.
Erik
Da funkt dann eben auch keine DOS-Emulation mehr dazwischen :-)
die Datensätze jeweils auf die Festplatte zwischenspeichern und das andere Programm laufend die Platte nach der Datei abfragen. Habe zum Speichern und Abfragen sowie antworten ca. 100-500 ms Zeit, wobei der Datensatz maximal 512 Bytebild groß ist. Die Menge ist also nicht das Problem, sondern die File-Aktionen. Mal sehen, ob es schnell genug geht.
Ggf. eine kleine RAM-Disk (1MB würden hier ja schon reichen) anlegen, damit sind HDD-Zugriffe zum Datenaustausch schonmal generell ausgeschlossen :-) Bei einer erlaubten Verzögerung von bis zu 0,5s wird das vermutlich die einfachste Lösung sein...
Oder gibt es eine andere Methode, einen String von einer Win-EXE in eine DOS-EXE und umgekehrt zu übermitteln, also ein Datenaustausch zw. zwei Programmen in zwei Prozessen?U.U. wäre noch eine Kommunikationsverbindung über Sockets möglich, die Du dann auf beiden Seiten als Stream zur Ein- und Ausgabe nutzen kannst.
Gruß
Borlander
Hi Andreas,
so etwas hatte ich gehofft. Ich werde die Stelle im Taskmanager mal suchen und es ausprobieren.
Hierfür schon mal danke.
Erik