任何人都可以告訴我如何延遲或計數在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