Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : c - timer



gorba
24-01-2006, 12:23
gibt es ne funktion in der ich z.b. alle 5 minuten eine funktion aufrufen kann? Und kann ich meine systemzeit auslesen und aufgrund von der ereignisse aufrufen?

ich finde die funktion time() sehr unpraktisch, da sie auf sec. von: epoche zu: jezt basiert. da ¨muss ich das ganze noch umrechnen. gibt es keinen einfacheren weg?

grz

SeeksTheMoon
24-01-2006, 14:15
gibt es ne funktion in der ich z.b. alle 5 minuten eine funktion aufrufen kann?
Du kannst unter Linux die Funktion sleep() und unter Windows Sleep() benutzen um den Prozess für die übergebene Zeit ruhen zu lassen und dann die Funktion aufrufen.


Und kann ich meine systemzeit auslesen und aufgrund von der ereignisse aufrufen?
Das geht nur mit time. Das umrechnen ist mit den ganzen Funktionen die mit den time-Datentypen arbeiten doch einfach

gorba
24-01-2006, 16:13
-.-
da blick ich irgendwie nich durch
ich brauche n time string im format:
JJJJ-MM-DD - HH-MM-SS
wie soll ich von den sekunden angaben von time() dazu kommen?
irgendwie über das tm struct in time.h aber ich blick nich durch..

BLUESCREEN3D
24-01-2006, 17:17
Stellst du zwei verschiedene Fragen in einem Thread oder warum bezieht sich das nun nicht mehr auf die Fünf-Minuten-Intervalle?


ich brauche n time string im format:
JJJJ-MM-DD - HH-MM-SS
wie soll ich von den sekunden angaben von time() dazu kommen?
irgendwie über das tm struct in time.h aber ich blick nich durch..
time() gibt dir einen Wert in Sekunden zurück.
Diesen kannst du mit localtime() umwandeln in eine struct tm, die dann die Zeit aufgeteilt in Tag, Monat, Jahr usw. enthält.
Das wiederum kannst du dann selbst in einen String packen oder du lässt das gleich von strftime() machen.

gorba
25-01-2006, 08:03
wow thx bluescreen
noch zu deiner frage, es bezieht sich immernoch auf die 5min intervalle. nur wurde meine idee nun abgelöst, dies mit überprüfen von time zu machen. ich werde das ganze mithilfe des signals ALARM realisieren, dass einer saubere lösung darstellt. troz allem hat mich das time thema noch interesiert, für die log-files. und:
genau die info über localtime() habe ich gebraucht =)
hast mir sehr geholfen

ps: bin ich der einzige der die ganze time geschichte in c sehr umständlich findet? grez

RHBaum
25-01-2006, 09:12
ps: bin ich der einzige der die ganze time geschichte in c sehr umständlich findet? grez

Noe ^^

Im Ernst, das Thema iss nich trivial. Nen einzelnen Thread fuer 5 min schlafen legen iss kein problem.
Nen program im 5 min rythmus zu unterbrechen (die main eventschleife oder was auch immer ) ist schon weniger trivial. Aber muss man wohl, wenn man das programm in den 5 min weiter bedienbar lassen will ....

Signale sind eine moeglichkeit ... aber standard Ansi-C kennt keine Signale
Fuer kompliziertere sachen bietet sich immer multithreading oder multiprocessing an ... aber Ansi-C kennt kein Multithreading / Multiprocessing

Wie soll das dann noch einfach sein ? ^^ Auch wenn die Anforderung immer noch trivial klingt :-)

Ciao ...

SeeksTheMoon
25-01-2006, 11:33
Prozesse und IPC werden nunmal vom Betriebssystem bereitgestellt und mit ANSI C schreibt man keine Systemprogramme. Das soll lediglich dazu dienen dass die Sprache einheitlich definiert ist und dass man auf unterschiedlichen Umgebungen den gleichen (d.h. minimalen) Funktionsumfang hat.

Du willst anscheinend einen Dienst schreiben und kein "gewöhnliches" Programm.

gorba
26-01-2006, 09:35
noe

microkontroller in embedded systemen. wenn signale nich verfügbar sind würde mir nur noch die sehr unsaubere lösung einfallen, ein time() beim start des programms zu machen und dan zu gegebener zeit (was auch immer das heissen mag) ein neues time() aufzurufen und die werte miteinander zu vergleichen.

für mich aber unmöglich, da das ding ein totaler ressourcen fresser is und ich die rechenleristung echt besser brauchen kann ;) ^^¨
die lösung würd ich nich mal auf nem normalen system nehmen, geschweigen den auf embedded...

mir bleibt nur ansi c für die systeme und ich bin glücklich darüber, da ich so viel kontrolle wie möglich bei mir behalten will.

schon ein wunder, dass die mich nich asm progn lassen ;)

Joghurt
28-01-2006, 17:50
Du kannst alarm nutzen.

Beachte aber, dass die Callbackfunktion nur wenige Funktionen sicher aufrufen kann, siehe "man signal"


#include <signal.h>
#include <unistd.h>
#include <stdio.h>

static int AlarmReached = 0;

void Signalhandler(int sig)
{
// Nur sehr wenige Bibliotheksfunktionen dürfen hier aufgerufen werden!
// siehe man signal
//
// Wir setzen stattdessen eine globale Variable

AlarmReached += 1;

// Und neu queuen
alarm(5);
}

int main()
{
signal(SIGALRM, Signalhandler);
alarm(5); // Nach 5 Sekunden auslösen
while (1) {
if (AlarmReached) {
printf("ALARM!!!\n");
AlarmReached = 0;
}
}
}

gorba
30-01-2006, 11:15
wow thx bluescreen
[...] ich werde das ganze mithilfe des signals ALARM realisieren[...]

schon passiert Joghurt. Danke trozdem. =)

RHBaum
30-01-2006, 12:12
mir bleibt nur ansi c für die systeme

[...] ich werde das ganze mithilfe des signals ALARM realisieren[...]
schon passiert Joghurt. ...


signal/alarm ist kein ANSI-C !!!
Dein Problem ist nicht effektiv mit Ansi-C oder C++ zu loesen !!!
Du tust es auch nicht ... also akzeptier es auch ^^

Das man mit c / c++ auch systemnahe Funktionen aufrufen kann, ist nicht nur Verdienst von C sondern verdienst der Schnittstellen (SystemV, Posix, Win32) die dein BS Dir zur verfuegung stellt ^^

Nur das hier begrifflich nix durcheinander kommt ^^

Ciao ...

gorba
01-02-2006, 07:48
ok! du hast natürlich recht. ohne die schnittstellen würd natürlich nichts gehen für unsere systeme. hab mich falsch augedrückt

zwischenfrage @ RHBaum:
gibt es auch mal was das du nicht weist? ;) ^^