Timer mit C

miris

Grünschnabel
Hallo C Experten,
Kann jemand sagen ob es mit C möglich ist einen "Timer" zu programmieren. Z.B. wenn eine Bedingung wahr wird, würde dieser anfangen die Zeit zu stoppen?

Vielen Dank schon jetzt
 
moin


Das mit dem wahr werden und der Timer startet automatisch, ist so nicht möglich. Das müsste man dann über nen zusätzlichen Thread machen.


Einen Timer zu starten ist aber ganz einfach.
Ich gehen jetzt mal davon aus das du eine Konsolenanwendung schreibst.
Du startest einen Timer und sagst ihm in welchen Intervallen er eine bestimmte Funktion aufruft. Diese Funktion erhöht dann immer irgend eine Zählervariable bis du den Timer killst.


mfg
umbrasaxum
 
Tut mir leid. Bin nich so fit. Kannst du mir das etwas ausführlicher erklären. Ich schreibe eine sogennante "C s-function" unter Matlab/Simulink. Nach dem kompilieren, auch mit Matlab, entsteht eine DLL die ich aus Simulink sehr leicht aufrufen kann. Der Code sollte einen Elektromotor steuern. Dazu müsste ich salopp gesagt ein stoppuhr starten nachdem ein Signal aktiv wird.

Vielen Dank und Gruß
Miris
 
Afaik gibt's in ANSI-C sowas nicht. Das müßtest Du selber implementieren. Das Dumme dabei ist, daß Du auf dem PC nur die Systemzeit verwenden kannst, die sehr ungenau ist. Also mit Intervallen im ms-Bereich kannst Du es meines Wissens vergessen. Wenn einer da mehr weiß, das würde mich auch interessieren.
Wenn der Code dann natürlich auf einem anderen Target laufen soll (z.B. auf einem µC), dann brauchst Du entsprechende Bibliotheken oder mußt Dir einen timer schreiben, der auf den Timer des Targets zugreift.
In jedem Fall sollte der Timer in einem eigenen Task (oder Prozeß) laufen.
 
moin


Hmm, ja, steht dir überhaupt C++ zur verfügung?

Und jokey2 hat recht das die meisten Timer sehr ungenau laufen.
Sehr genau dagegen läuft timeGetTime (standartmäßig auf 5ms genau).

Code:
#include <iostream>
#include <windows.h>

#pragma comment(lib, "winmm.lib")

using namespace std;


int main( )
{

	DWORD time1 = timeGetTime();

	cin.get();

	DWORD time2 = timeGetTime();


	cout<< "Vergangen sind: "<< (time2 - time1) / 1000<<" Sekunden";
	cin.get();

	return 0;
}

Wenn dir die genauigkeit von 5ms nicht ausreicht, kann man die Genauigkeit auch noch erhöhen.

Alle Angaben unter der Vorraussetzung das dir die Funktion zur verfügung steht.


mfg
umbrasaxum
 
Zuletzt bearbeitet:
timeGetTime() gibt es nicht aber eine funktion clock habe ich gefunden. Den Rest vom Code lässt sich glaube ich verwenden um Zeit zu messen. Vielen Dank für die Hilfe und beste Grüße
 
moin


Wenn du clock verwendest und eine Zeit ermitteln willst ist es unbedingt nötig, die Dauer, nochmal durch CLK_PER_SEC zu teilen!

Code:
#include <stdio.h>
#include <conio.h>
#include <time.h>

int main()
{
	clock_t start, finish;
	double  laufzeit;

	start = clock();

	getch();

	finish = clock();

	laufzeit = (double)(finish - start) / CLOCKS_PER_SEC;
	printf( "%2.5f Sekunden\n", laufzeit );

	return 0;
}


mfg
umbrasaxum
 
Zurück