2017-02-19 1 views
3

Ich versuche, in das Terminal eine Zeile zu einer Zeit zu schreiben, aber es druckt nur die ganze Sache, ohne zu schlafen. Es funktioniert, wenn ich Schlaf (1) verwende. Versteh ich einfach nicht, wie Nanosleep funktionieren soll?Warum schläft C Nanosleep() nicht hier?

void                   
display_all(int fdin, int fdout)            
{                    
    struct timespec tm1,tm2;             

    tm1.tv_sec = 0;                
    tm1.tv_nsec = 1000000000L;                            
    while (display_line(fdin, fdout) == 80)          
    {                   
     nanosleep(&tm1,&tm2);             
    }                   

} 

display_line verwendet die Funktion write um auf STDOUT zu schreiben.

+6

Lesen der [Manpage] sein muss (https://linux.die.net/ man/2/nanosleep) hilft immer: "Der Wert des Nanosekundenfeldes muss im Bereich von 0 bis 999999999 liegen". – kaylum

+0

Verwenden Sie keine Nanoschwellen für große Betten: Es ist genau, aber isst viel CPU, weil es kalibrierte aktive CPU-Schleifen verwendet. Nicht für eine lange Verzögerung geeignet. –

+0

wow. Das hat es für mich getan, danke. und yeah @ Jean-FrançoisFabre Ich habe gerade getestet, wie man es benutzt, weil ich einen Geschwindigkeitsmodifikator machen muss, um die Geschwindigkeit zu erhöhen, die es liest oder verringert. – WizKiz

Antwort