Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Sleep microseconds

Aktivity
Avatar
dirtyjobs
Člen
Avatar
dirtyjobs:5.2.2016 11:11

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.2.2016 11:11
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na dirtyjobs
Martin Dráb:5.2.2016 12:16

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í
+2,50 Kč
Řešení problému
Nahoru Odpovědět
5.2.2016 12:16
2 + 2 = 5 for extremely large values of 2
Avatar
Odpovídá na dirtyjobs
Libor Šimo (libcosenior):5.2.2016 12:46
#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
5.2.2016 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.