Izvršavanje funkcije određen vremenski interval u C-u


#1

Evo jedno tehničko pitanje, od mene ne-programera

Kako da napravim u C-u da se funkcija vrti točno x sekundi i onda prestane? Sve varijable koje je funkcija promjenila bi trebale ostati kakve su bile prije nego se funkcija prestala izvrsavati.

Pozdrav,

Pero


#2

U najjednostavnijem slučaju, možeš probati sa sleep funkciijom. Dokumentacija za Linux ovdje.


#3

A ne ne, ne treba mi sleep opcija. Ne želim pauzirati program. Želim da se funkcija izvršava u petlji koja traje točno x sekundi.


#4

Moraš malo više konteksta dati onda :slight_smile: Što ti je točno cilj? Da li želiš namjerno CPU jesti pa zato želiš nešto u for petlji raditi kao benchmark?


#5

Ne znan kako da objasnin, zamisli da iman funkciju neku bezveznu

int bezvezna_funkcija(){
    printf("ja sam bezvezna funkcija");
    return 0;
}

i sad da pozoven tu funkciju u nekoj petlji u mainu

neka petlja{
    bezvezna_funkcija();
}

i cilj mi je da da petlja traje točno npr 10 sekundi, pod pretpostavkom da se vrijeme izvođenja bezvezne funkcije ne mijenja.


#6

OK, mislim da kužim. Znači, želiš u biti provjeravati koliko je vremena prošlo od ulaska u petlju i prekinuti ju nakon 10 sekundi. Sad, nisam dugo već C pisao, ali uz ovaj SO odgovor, mislim da bi kod išao otprilike:

clock_t begin, end;
double time_spent;

begin = clock();
// ulazak u petlju
while (1) {
    bezvezna_funkcija();
    // opcionalno neki kratki sleep ovdje
    // sleep(1);
    end = clock();
    time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
    if (time_spent >= 10)
        break;
}

#7

Da, tako nesto bi mi pasalo. Sad samo da tako nesto izvedem u 8-bitnom processoru :slight_smile: mislin da ce bit najbolje napravit neki timer koji generira prekid koji uzrokuje “break”


#8

E al inače samo da te malo usmjerim jer vidim da u puno pitanja pitaš o tom čekanju da nešto završi, što je naravno česta situacija kad radiš s hardwareom. Baci oko na JavaScriptov asinkroni pristup hardwareu gdje sustav pozove tvoju funkciju kad se neki događaj dogodi (nešto stigne s mreže, nešto novih podataka je došlo na neki USB port…). Primjere imaš u projektima kao npr. NodeBots.