2013-03-03 56 views
2

任何人都可以告诉我如何延迟或计数在C?我的意思是在1秒后写1和2。我知道的唯一方法是如何在c中延迟(backcount)?

include<windows.h> 

Sleep(1000 /* milliseconds */); 

任何人都可以请给我看另一种方式来做到这一点? (我有Windows 8)

+0

C ___or___ C++。做出你的选择。不是都。 – Zeta 2013-03-03 18:17:26

+0

不要编写多语言源文件。这是非常艰苦的工作**,而且结果往往不是一种语言或其他语言。 – pmg 2013-03-03 18:18:08

+0

@pmg实际上对于C/C++来说可能是相当合理的。我一直这样做。 – 2013-03-03 18:19:18

回答

2

如果你只限于标准C89

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

int main(void) { 
    time_t t; 

    /* wait until the Standard clock ticks */ 
    t = time(0); 
    while (time(0) == t) /* void */; 

    /* print 1 */ 
    puts("1"); 

    /* wait until the Standard clock ticks again */ 
    t = time(0); 
    while (time(0) == t) /* void */; 

    /* print 2 */ 
    puts("2"); 

    return 0; 
} 

如果你可以使用POSIX:使用nanosleep()

+5

旋转等待很少是一个好主意。 – Alan 2013-03-03 18:22:53

+0

@pmg,因为这是唯一的C答案,所以你也可以建议difftime()。对于OP来说,这是一个阻塞实现,所以如果你想阻塞行为,那么这将适用于像Windows这样的多任务操作系统。 – 2013-03-03 18:27:54

1

使用alarm()设置闹钟,稍后再打,然后拨打pause()

+0

刚注意到'winapi'标签:我不确定在这个环境中是否有'alarm()'。 – alk 2013-03-03 18:32:49

+0

'alarm()'的窗口挂件是'SetTimer()'。虽然只是更换它是行不通的。因为在windows下似乎也没有“暂停()”。 – alk 2013-03-03 18:42:21

2

您可以使用thrd_sleep,这是可以在C11,以及为它编写一个简单的包装:

void sleep(time_t seconds){ 
    struct timespec ts, remaining; 
    timespec_get(&ts, TIME_UTC); 
    ts.tv_sec += seconds; 
    while(thrd_sleep(&ts,&remaining) == -1){ 
     timespec_get(&ts, TIME_UTC); 
     ts.tv_sec += remaining.tv_sec; 
    } 
} 
0

采用select()将是另一个,也是便携的解决方案,虽然很不寻常的办法来(只是)会产生延迟。