Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

V.24 mit Turbo Pascal unter Windows XP

Erik_aus_Kaki / 9 Antworten / Baumansicht Nickles

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.

bei Antwort benachrichtigen
Achim20 Erik_aus_Kaki „V.24 mit Turbo Pascal unter Windows XP“
Optionen

Die DOS-Emulation von XP ist leider nicht sehr gut. Probier mal die DOSBOX aus (gibt's bei Sourceforge), damit geht's sicher besser.

FUMANCHU4EVER
bei Antwort benachrichtigen
Andreas42 Achim20 „Die DOS-Emulation von XP ist leider nicht sehr gut. Probier mal die DOSBOX aus...“
Optionen

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

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen
Achim20 Andreas42 „Hi! Ne, das dürfte nichts bringen. Das Problem ist hier nicht die generelle...“
Optionen

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...

FUMANCHU4EVER
bei Antwort benachrichtigen
Borlander Achim20 „Ich hatte mir erhofft, dass sich die hohe Systembelastung, die Emulatoren mit...“
Optionen

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

bei Antwort benachrichtigen
Andreas42 Erik_aus_Kaki „V.24 mit Turbo Pascal unter Windows XP“
Optionen

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

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen
Borlander Andreas42 „Hi! Ich wüsste nicht, dass man soetwas durch Compilerschalter bei...“
Optionen
Ich habe überlegt, ob man das über die normale Prozesspriorisierung von XP beeinflussen kann.
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
bei Antwort benachrichtigen
Erik_aus_Kaki Borlander „ Das wäre auch meine erste Überlegung, dem Programm einfach mal eine höhere...“
Optionen

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

bei Antwort benachrichtigen
Borlander Erik_aus_Kaki „Hallo zusammen, habe Prio auf Hoch und sogar auf Echtzeit gesetzt. Keine...“
Optionen
Als Windows-EXE mit VB klappt die Verbindung
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
bei Antwort benachrichtigen
Erik_aus_Kaki Andreas42 „Hi! Ich wüsste nicht, dass man soetwas durch Compilerschalter bei...“
Optionen

Hi Andreas,
so etwas hatte ich gehofft. Ich werde die Stelle im Taskmanager mal suchen und es ausprobieren.
Hierfür schon mal danke.
Erik

bei Antwort benachrichtigen