为什么C nanosleep()不在这里睡觉?

时间:2017-02-19 22:57:39

标签: c sleep

我试图一次向终端写一行,但它只打印整个东西而不会睡觉。如果我使用sleep(1)它会起作用。我只是不明白nanosleep是如何工作的?

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使用函数write写入STDOUT。

2 个答案:

答案 0 :(得分:6)

来自nanosleep man page

  

纳秒字段的值必须在0到999999999范围内

答案 1 :(得分:1)

#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;
}

或者:

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