WizKiz
WizKiz

Reputation: 164

Why is C nanosleep() not sleeping here?

Im trying to write to the terminal one line at a time but it just prints the whole thing without sleeping. It works if I use sleep(1). Am I just not understanding how nanosleep is suppose to work?

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 is using the function write to write to STDOUT.

Upvotes: 3

Views: 2506

Answers (2)

user11418441
user11418441

Reputation:

#include <stdio.h>
#include <time.h>    

#define MILISECONDS 300 
#define NLOOPS 10

void nsleep(long miliseconds) {
    struct timespec ts = {0, miliseconds * 1000000L};
    nanosleep(&ts, NULL);
}


int main() {

    short i;

    for (i = 0; i < NLOOPS; i++)
        fflush(stdout),
        nsleep((long) MILISECONDS),
        printf("%d miliseconds\n", MILISECONDS);

    return 0;
}

Or:

void nsleep(long miliseconds) {
    struct timespec ts;
    ts.tv_sec = 0;
    ts.tv_nsec = miliseconds * 1000000L;
    nanosleep(&ts, NULL);
}

Upvotes: 1

kaylum
kaylum

Reputation: 14046

From the nanosleep man page:

The value of the nanoseconds field must be in the range 0 to 999999999

Upvotes: 8

Related Questions