2016-10-01 25 views
1

我需要指定程序在N秒後結束。我認爲這將意味着封閉整個程序的某種做while循環,但我無法弄清楚具體細節。這將如何完成?確保程序僅運行N秒

對於一個非常簡單的例子,可以說我希望它至少3秒內運行線

printf("Hello world\n"); 

N秒

+0

這將取決於該代碼。你能告訴我們你的嗎? –

+1

爲什麼代碼本身很重要?這可能與打印「Hello World」N秒一樣簡單。 – Bob

+0

如果程序正在讀取2TB文件,則不同。 –

回答

2

這愚蠢的代碼打印Hello World

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

int main() 
{ 

    time_t start_timer = time(NULL); 
    while(1) 
    { 
     printf("Hello world\n"); 
     if (time(NULL)-start_timer > 3) 
     { 
      break; 
     } 
    } 
    return 0; 
} 

當然,如果程序不是僅僅打印一條消息,而是執行一個大的計算/輸入/輸出操作/網絡操作,它可能需要超過3秒。

在這種情況下,根據相關評論的建議,創建一個「看」線程並檢查計算並行時間流逝會更好(但更復雜,因此必須有必要)(使用cpu - 通過時間等待機制避免吃100%的CPU),如果花費太長時間,則會導致計算線程死機。

(注意,如果一個大的I/O操作過程中,該線程殺可能需要一段時間,因爲線程不活躍在這個時候)

+0

這是一種常見的模式,通常在一個單獨的「看門狗」線程中,如果線程太長,可能會中斷主線程。這在例如非常有用功能測試有時可能會掛起。 – jforberg

+0

@jforberg true。但它是一個監督者,你將不得不插入一些「睡眠」,否則你的看門狗會吃掉100%的CPU。 –

+0

是的,自然。但是睡眠不是標準的C,如果你在「C」標籤下建議非跨平臺的解決方案,堆棧溢出往往會讓你吃不起... – jforberg

相關問題