Timer mit C

Hallo!

Kann mir bitte jemand bei dieser Aufgabe weiter Helfen?

Ich habe eine ASCII-Datei, aus dieser möchte ich nach z.B jede 50msec eine neue Zeile auslesen. Die Zeit soll Variabel sein, also eine Konstante die man leicht ändern kann.

Ich Danke im Voraus für jede Ansätze und Vorschlge!

MfG,

Ich habe eine ASCII-Datei, aus dieser möchte ich nach z.B jede
50msec eine neue Zeile auslesen. Die Zeit soll Variabel sein,
also eine Konstante die man leicht ändern kann.

Hallo,

Timer werden vom Betriebssystem (Windows: GetTimer) zur Verfügung gestellt, oder man muss auf einem Embedded-Controller die Hardware direkt verwenden. Mit C-Bordmitteln kann keine Zeitschleife programmiert werden, da das Ergebnis extrem von der Umgebung (Prozessor, BS) abhängig wäre und mit Sicherheit auch nicht konstant.

Eine grobe Näherung ist mit einer sleep-Funktion möglich, aber es ist mit starkem Jitter zu rechnen.

Gruss Reinhard

Hallo Alexander,

Ich habe eine ASCII-Datei, aus dieser möchte ich nach z.B jede
50msec eine neue Zeile auslesen. Die Zeit soll Variabel sein,
also eine Konstante die man leicht ändern kann.

Wie Reinhardt schon sagte, das kommt darauf an - auch darauf,
ob das Dein System überhaupt schafft :wink:

Welche Umgebung ist denn gegeben? Windows-Rechner
mit Visual-C++? Oder eine Linux-Box mit gcc3/4?

Wozu soll das Ganze dienen? Auch darauf kommt
es an, wenn man nach vernünftigen Lösungen
sucht.

Grüße

CMБ

Guckstu: http://www.fh-fulda.de/~klingebiel/c-stdlib/time.htm

Mit der time.h hast du eigentlich alles was du brauchst. Wie die andern schon sagen: garantiert ist die Zeit damit nicht - andererseits ist es i.d.R. keine Katastrophe, wenn er 53 ms brauch. :wink: Soll heissen, ich hatte noch nie Probleme damit.

Die Funktion, die du brauchst, ist
clock_t clock(void);

Damit kannst du sowas schreiben:

#include
// …

const short wartezeit = 50;

long time1 = clock(),
time2 = clock;

while(!dein_datei_strom.eof())
{
// Warten
while(time2 - time1

Das ist jetzt nicht die sauberste oder eleganteste Lösung, müsste aber funzen…

kvida

Hallo,

mal ausgehend davon das du unter Windows arbeitest…
Folgendes stammt aus einem Programm, das mit VC6 und MFC geschreiben wurde.

  1. man erzeugt einen Timer
    timerID = ::SetTimer(NULL,0,myTimeSpan,&myTimerProc); myTimeSpan in ms, timerID merken fuer Callbackfunktion

  2. man schreibt eine Callbackfunction
    VOID CALLBACK myTimerProc(HWND hwnd,UINT uMsg,UINT eventID,DWORD dwTime) ; eventID = timerID
    { …
    }

  3. in der Callbackfunction definiert man die gewuenschte Funktionalitaet

  4. Der TimerEvent wird solange vom System ausgeloest bis man KillTimer aufruft

{
::KillTimer(NULL,timerId); //Stop the time… it has done it’s duty

}

Hope this helps

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Grundsätzlich ist dazu noch zu sagen, dass Windows in diesem Fall eigentlich eine Meldung generiert, welche dann an deinen Task weitergeleitet wird. In der GetMessage-Schleife wird es dann decodiert und die entsprechende Funktion aufgerufen.

Wenn also deine Message-Queue nicht verarbeitet wird, kommt auchder Timer nicht.

MfG Peter(TOO)

mal ausgehend davon das du unter Windows arbeitest…
Folgendes stammt aus einem Programm, das mit VC6 und MFC
geschreiben wurde.

  1. man erzeugt einen Timer
    timerID = ::SetTimer(NULL,0,myTimeSpan,&myTimerProc);
    myTimeSpan in ms, timerID merken fuer Callbackfunktion

  2. man schreibt eine Callbackfunction
    VOID CALLBACK myTimerProc(HWND hwnd,UINT uMsg,UINT
    eventID,DWORD dwTime) ; eventID = timerID
    { …
    }

  3. in der Callbackfunction definiert man die gewuenschte
    Funktionalitaet

  4. Der TimerEvent wird solange vom System ausgeloest bis man
    KillTimer aufruft

{
::KillTimer(NULL,timerId); //Stop the time… it has done
it’s duty

}

Hope this helps

Peter

Hallo!

Kann mir bitte jemand bei dieser Aufgabe weiter Helfen?

Ich habe eine ASCII-Datei, aus dieser möchte ich nach z.B jede
50msec eine neue Zeile auslesen. Die Zeit soll Variabel sein,
also eine Konstante die man leicht ändern kann.

Ich Danke im Voraus für jede Ansätze und Vorschlge!

MfG,

Viele Dank für an alle!

Das Problem hat sich schon von selber gelöst, da ich heute erfahren habe, daß das Timer-Modul schon fertig entwickelt ist und ich nur die Schnittstellen anpassen muss.

Trotzdem noch ein paar Daten:
Betriebssystem: OS-9000 ( da wo das Progr. später läuft)
Etwicklung unter: Win2000 mit Microware HAWK

MfG,