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
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.
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
Habe das Problem lokalisiert : Es hat den HiTimer anscheinend gestört, das ich in der eigenen HiTimer-Subroutine die Intervalwerte geändert habe, ohne vorher den HiTimer zu disablen... VG ED
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.