2 Stimmen

timer in c, die den cpu nicht auslasten

Ich habe eine Zeitschaltuhr nach einigen Beispielen aus dem Internet geschrieben:

void fun(int i)
{
    struct itimerval to;

//do something

    signal(SIGALRM, fun);

    to.it_interval.tv_sec = 0;
    to.it_interval.tv_usec = 0;
    to.it_value.tv_sec = 60;
    to.it_value.tv_usec = 0;

    setitimer(ITIMER_REAL, &to, 0);
}

in der Hauptfunktion rufe ich diesen Spaß nur einmal auf und führe dann dort eine while-Schleife aus.

Das Programm verhält sich gut, außer dass es die CPU voll auslastet (zu 99% oder 100%), aber wenn ich die while-Schleife entferne, wird die "fun"-Funktion nur einmal aufgerufen. Wie kann ich verhindern, dass sie regelmäßig aufgerufen wird, ohne den Prozessor zu 100% zu belasten?

4voto

Maxim Egorushkin Punkte 125210

Wahrscheinlich möchten Sie eine Ereignisschleife so dass Ihr Programm schläft und keine CPU verbraucht, wenn es nichts zu tun gibt. Ein einfacher Weg wäre die Verwendung von libevent .

Andernfalls verwenden Sie select() o pselect() .

1voto

Hicham Punkte 973

Können Sie pause() . Link

in der Hauptsache:

fun(i);
while(1)
    pause(); 

und fun() wird alle 60 Sekunden einen Spaß ausführen.

sleep() o Sleep() (Windows) ist auch Ihr Freund. (in der Schleife anstelle von pause())

Eine andere Möglichkeit ist die Verwendung von sigsuspend() Link

0voto

varunl Punkte 18161

Select() in C würde das tun, was Sie wollen. Und es ist von Mikrosekunden-Granularität.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X