2013-07-07 38 views
0

我試圖在c中實現超時機制。我想要一個特定的函數執行15秒。如果執行時間超過15秒,程序應該終止。如何在c中定義函數的超時值

如:

void somefunction() 
{ 
//------------ 
} 
void main() 
{ 
somefunction();//this function should have execution time of 30 seconds. 
//If it takes more than 30 seconds it should timeout and pop and error. 

} 
+4

'somefunction()'是否是一個願意參加這個超時的人,或者你是否試圖強制使用它? – mah

+0

什麼操作系統?沒有標準的c方式,但是像select這樣的函數顯式地使用超時參數 – SheetJS

+0

即時嘗試強制超時。最大需要40秒的時間來執行,但如果存在某些無法解釋的問題,則不會退出。 –

回答

3

既然你已經評論說,這將是一個有力的超時時間,你是在Unix ...

1)初始化,聲明爲一個信號處理器SIGALRM信號。該信號處理程序將調用longjmp()

2)在進入你的功能之前,請撥打setjmp()設置跳轉點(對於longjmp()),並在超時期間安裝alarm()

3)如果setjmp()返回0,則調用你的somefunction()。如果它返回非零值(當你調用lonjmp時你可以控制它),你知道你已經超時了。

「man alarm」,「man longjmp」,「man setjmp」,「man signal」更深入的細節。

+1

爲什麼downvote? –

0

我建議包括「time.h中」,然後寫一個簡單的代碼看起來像這樣自己的函數中:

#define FUNC_EXEC_TIME 15 

void someFunction() { 
    if(clock() > FUNC_EXEC_TIME * 1000) return; 
    //... 
} 

如果您有它很多的循環,只要把上面的代碼在它的內部。

+1

我問他的'somefunction()'是否願意參與,他說不是。我問的原因是要確定這是否是解決問題的好方法。 – mah

+0

@mah他問。我只是告訴我所知道的。如果他/她會有另一個問題,那麼爲什麼又擔心再問一次? – mr5

相關問題