Avatar
dirtyjobs
Člen
Avatar
dirtyjobs:

Není nějaká spací funkce v mikrosekundách, ani google si moc neví rady, jednu jsem našel, ale ta sama o sobě bere asi milisekundu aby se vůbec spustila. děkuji

 
Odpovědět 5. února 11:11
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na dirtyjobs
Martin Dráb:

Spát mikrosekundy není dost dobře na majoritních OS možné, pokud:

  • nepíšeš ovladač,
  • ti nevadí, že během onoho čekání začne běžet jiné vlákno a k tobě se procesor může vrátit až mnohem později, než jsou tebou specifikované mikrosekundy.

Čekání v mikrosekundách je věc, která už moc dobře nelze řešit pasivním čekáním (čekající vlákno je přeplánováno jiným) kvůli režii. Takže bys musel čekat aktivně. Tam ale obvykle nemůžeš zaručit, že tvému vláknu nevyprší časové kvantum a není přeplánováno někým jiným.

Alespoň takhle to chodí ve Windows. Myslím si ale, že v Linuxu to bude podobné, pokud si nedokompiluješ do kernelu nějaké rozšíření pro realtime aplikace.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 5. února 12:16
2 + 2 = 5 for extremely large values of 2
Avatar
Odpovídá na dirtyjobs
Libor Šimo (libcosenior):
#include <stdio.h>
#include <time.h> // potrebné k funkcii

/* funkcia - pauza na 1 milisekundu */
void sleep(unsigned int msecund)
{
    clock_t ciel; // deklarácia premennej typu clock_t
    ciel = msecund + clock(); // vložiť do premennej čas o trvaní 1 milisekundy (sekunda má 1000 milisekúnd)
    while (goal > clock()); // beží kým sa nevy-clock-uje po 0 (nulu)
}

/* napr.: použitie na spomalenie vypisu cyklu */
int main(void)
{
    int i;

    for (i = 1; i < 11; i++) {
        printf("%d ", i);
        sleep(200); // pauza na 200 milisekúnd, teda 0,2 sekundy
    }

    return 0;
}
Nahoru Odpovědět  -1 5. února 12:46
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.