Zegarek w konsoli pisany w C. Zajmuje 100% procesora.

0

Witam,
Jest to mój pierwszy post, więc postaram sie przedstawić. Nazywam się Marcel Rzepka, mam 15 lat. Od 4 lat ucze się programowąć w C, dla komputerów PC, a od roku dla mikrokontrolerów AVR.
Mój problem polega na tym, że program który ma odliczać n sekund. Zajmuje 100% procesora. Oczywiście jest to moja wina i błednego kodu, który cały czas sprawdza czas systemowy.
Z rozwiązań przychodzi mi na myśl funkcja sleep(), albo żeby dobrać sie do timerów procesora.
Z góry dziękuje za pomoc.
other019
KOD PROGRAMU:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int hours=0;
int minutes=0;
int seconds=0;
unsigned long long delay=0;
int main(int argc, char *argv[])
{
    unsigned long long left=0;
    int last_left=0;
    /*
    int hours_left=0;
    int minutes_left=0;
    int seconds_left=0;
    */
    time_t start;
    time_t curent;
    time_t target;

    start = time(NULL);

    hours=atoi(argv[1]);
    minutes=atoi(argv[2]);
    seconds=atoi(argv[3]);

    delay=seconds+(minutes*60)+(hours*3600);
    target=start+delay;
    do{

    curent=time(NULL);
    left=target-curent;


    if(last_left!=left)
    printf("pozostalo sekund:%d\n",left);
    last_left=left;
    }while(left!=0);
    printf("%c",7);
    return 0;
} 
0

No ale przecież sam sobie odpowiedziałeś. Jak nie chcesz żeby program cały czas sprawdzał czas to na końcy petli rób Sleep na 1 sekundę. W czym problem?

0

Po prostu nie wydaje mi się to optymalnym rozwiązaniem i liczyłem, że zaproponujecie coś ciekawszego. Może WINAPI, bo nie miałem okazji poznać.

1

Jak mówisz, że chcesz poznać WinAPI, to funkcja SetTimer pozwala odmierzać czas.

0

Super, a jak jeszcze byście powiedziei o czymś takim pod Linuxa, to byłbym w pełni szczęśliwy.

0

Nie, Windowsa mam zainstalowanego równolegle, po prostu chce z ciekawości wiedzieć czy istnieje coś takiego dla Linuxa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1