Millisekunden Interrupt
-
Hallo zusammen,
ich habe folgendes Problem:
Der Benutzer drückt eine Button, nach einer zeit von X millisekunden soll
eine funktion ausgeführt werden.Ich dachte ich könnte dies mit der Timer-Komponente realisieren, aber die ist zulangsam.
Müste dies nicht mit "Theards" ( oder wie diese dinger heissen ) gehen ?
Vielen dank
gruß
Thomas
-
Naja, dann könntest Du im Thread mit einem Timer die Zeit messen. Du wartest im Hauptprogramm darauf, daß der Thread beendet und rufst dann Deine Funktion auf. (Ich hoffe, das klingt für Dich genauso schwachsinnig, wie für mich
)
Wenn Dir Timer zu ungenau sind, würde ich (bei Zeiten von wenigen Millisekunden) vermutlich eine while-Schleife machen und GetTickCount auslesen.
Aber ich glaube, ich hab auch schon mal eine "offizielle" Lösung gesehen, wie man vorgehen kann.
Gruß,
Christian
-
GetTickCount war auch mein gedachter ansatz, jedoch weiss ich nicht wie ich so ein Thread erstelle. Und zudem weiss ich nicht wie ich so einen Interrupt ausführe.
Im groben und ganzen benötige ich sowas diese Timer-Komponente nur dass es im msec. bereich geht.
Ist dieser ansatz mit den Theards verkehrt ?
Bei ButtenClick führe ich ein GetTickCount aus und hinterleg den Wert in Var1 im Theard wird permanent ein GetTickCount genommen und die differenz gebildet. Ist die Differenz so wie gewünscht, so wird eine bestimmte funktion ausgeführt.
Nun die Application muss weiterlaufen und darf nicht einfrieren, deshalb dachte ich an ein thread.
Gruß
Thomas
-
Gibt es für sowas nicht eine wait() oder sleep() Funktion?
-
Ich benutze für so winzige Zeitintervalle immer meine eigene Wait-Funktion und wenn die Application mal 10 oder 100 ms warten mußt, macht das auch nix. Aber so wie es klingt, dauert es bei Dir ja noch nicht einmal so lang.
jedoch weiss ich nicht wie ich so ein Thread erstelle
Ja und? Was war an
Ich hoffe, das klingt für Dich genauso schwachsinnig, wie für mich
so schwer zu verstehen?
Mach eine Lösung - von mir aus mit Timern, die sollen aber recht ungenau sein - oder wie oben beschrieben ...... und wenn Dir das mit einer Wait-Funktion nicht schmeckt, weil das Programm einfrieren könnte, versuch doch mal mit einer Stopuhr ein Intervall von ein paar Millisekunden zu stoppen und sag mir hinterher, ob Du wirklich glaubst, daß DAS vom Endkunden überhaupt bemerkt werden könnte?
-
kommt auf die häufigkeit an oder was er währenddessen in der oberfläche verändern will ... ich hab u.a. mit ner anwendung zu tun in die immer mehr funktionen eingebaut worden, leider alles im threadkontext der oberfläche ..... je nach "auslastung" ruckelt das ganz doch schon ziemlich hässlich, von den für meinen geschmack SEHR unsauber eingestreuten Application->ProcessMessages() mal abgesehen .... ich schweif aus oder .... verdeutliche mal dein problem, vielleicht kann man dir dann auch besser helfen _
-
Guten morgen,
ihr habt recht, ich muss das problem verdeutlichen.
Ich versuche einen Modbus RTU slave aufzubauen. Ich empfange bei über die rs232 zeichen. sobald ich ein zeichen empfange muss ich einen "Timer" auf 0 setzen. nach ablauf einer bestimmten zeit (im ms bereich) muss ich dieses Protokoll auswerten.Sleep scheint mir hier der total verkehrte ansatz zu sein. Da die anwendung ja nicht warten soll. Ich muss nur wissen wann eine bestimmte zeit abgelaufen ist.
Ich hoffe ich habe mich besser ausgedrückt als zuvor.
Danke und Gruß
Thomas
-
konkret würd ich da sagen, lass in einer schleife deine arbeit passieren, die passieren soll, zähl mit gettickcount() oder anderer Zeiterfassung die msecs mit und wenn ein bestimmter wert übersachritten wird brichst du ab und wertest aus, oder du nimmst einen thread, speicherst alle ankommenden informationen permanent zwischen (mit empfangszeit) und wertest die gespeicherten informationen in einem anderen Thread aus (so verpasst du weitere eingehende signale nicht)
-
Hallo,
Wenn du die Zeit genauer haben willst, kannst du auch das hier verwenden
QueryPerformanceCounter