2013-03-03 53 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()將是另一個,也是便攜的解決方案,雖然很不尋常的辦法來(只是)會產生延遲。