任何人都可以告诉我如何延迟或计数在C?我的意思是在1秒后写1和2。我知道的唯一方法是如何在c中延迟(backcount)?
include<windows.h>
Sleep(1000 /* milliseconds */);
任何人都可以请给我看另一种方式来做到这一点? (我有Windows 8)
任何人都可以告诉我如何延迟或计数在C?我的意思是在1秒后写1和2。我知道的唯一方法是如何在c中延迟(backcount)?
include<windows.h>
Sleep(1000 /* milliseconds */);
任何人都可以请给我看另一种方式来做到这一点? (我有Windows 8)
如果你只限于标准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()。
旋转等待很少是一个好主意。 – Alan 2013-03-03 18:22:53
@pmg,因为这是唯一的C答案,所以你也可以建议difftime()。对于OP来说,这是一个阻塞实现,所以如果你想阻塞行为,那么这将适用于像Windows这样的多任务操作系统。 – 2013-03-03 18:27:54
您可以使用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;
}
}
采用select()
将是另一个,也是便携的解决方案,虽然很不寻常的办法来(只是)会产生延迟。
C ___or___ C++。做出你的选择。不是都。 – Zeta 2013-03-03 18:17:26
不要编写多语言源文件。这是非常艰苦的工作**,而且结果往往不是一种语言或其他语言。 – pmg 2013-03-03 18:18:08
@pmg实际上对于C/C++来说可能是相当合理的。我一直这样做。 – 2013-03-03 18:19:18