HI-Timer in VB6

Gast #295915
Lesenswert?

Hallo Forianer,
ich hoffe, einer von euch hatte schon selbiges Problem, und konnte es
lösen.
Über Jahre hinweg habe ich unter VB6 ein schönes Anwenderprogramm
entwickelt, welche die zu verarbeitenden Daten über die serielle
Schnittstelle bekommt. Dazu benutze ich einen Timer, das Unterprogramm
zyklisch aufzurufen, welches den Eingangspuffer pollt, und die
Datenframes zusammensetzt. Es ist nicht der Standard-Timer von
Microsoft, sondern HITIME.OCX von Mabry. D.h. mit dem kann ich bis zu
1ms-Interrupts auslösen. Ich benutze ihn bis etwa 10ms runter, je nach
Datenaufkommen an der seriellen.
Nun das Problem :
Unter Windows-ME läuft das ganze Super, ohne jegliches Problem.
Unter Windows-XP läuft es auch, nur das der HiTimer nach ca. 65000
Aufrufen des Unterprogramms stirbt, d.h. das Unterprogramm wird nicht
mehr aufgerufen. Der Rest des Programs, auch normale Standard-Timer
laufen weiter. Der HiTimer ist nur noch durch Re-Start des Programs
wieder zum Leben zu erwecken.

Ich habe versucht, vor dem 'kritischen' Zeitpunkt in den
Eigenschaften zu verändern, kurz anzuhalten, und wieder weiter laufen
zu lassen; nichts hilft.
Hat jemand ne' Idee ?

Danke und viele Grüße
ED
Gast #295917
Lesenswert?

Ist zwar etwas hart von Tobi ausgedrückt aber er hat recht.

Lass das Polling, auch schon zu Doszeiten hat man bei höheren
Datenraten den Interrupt benutzt.
Verlagere das Abholen der Zeichen in eine Eventroutine ,die aktiviert
wird wenn neue Zeichen ankommen. Setze dort den Frame zusammen und
aktiviere ein Event wenn du einen kompletten Frame hast.
Solltest du beim Polling bleiben wollen, so vergrößere den Puffer für
die serielle Schnittstelle und überlege dir wie schnell du auf einen
Frame reagieren willst. Vergiss dabei Zeiten unter 20ms das wird auf
diese Weise nur Problematisch. Im Puffer der Schnittstelle kann mehr
als ein Zeichen liegen und ich denke du wirst sehr schnell einsehen,
dass der Programmcode übersichtlicher wird wenn du das ganze
Eventbasiert machst.
Am besten wird es allerdings, wenn das ganze in einem eigenen Thread
läuft.
Gast #295918
Lesenswert?

Dankeschön für Eure Tips !
Werde jetzt am Wochenende mal sehen, was ich da machen kann.
Eins habe ich noch versucht, den Hitimer ausgetauscht gegen einen
normalen. Vom prinzip geht das ohne Absturz des Timer auch unter XP,
jedoch laufen mehr Zeichen ein, als so abgeholt werden können...
Mal schaeuen, wie man das per Interrupt löst.
Viele Grüße
ED

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren