2012-01-31 67 views
5

這裏我有一個函數是監聽模式。這個函數列出了我從某些設備上獲得的東西。想要在C中實現一個函數的超時

這裏當我的功能處於監聽模式時,我想創建超時。如果我不會從特定設備得到任何迴應,那麼我會退出此功能並且必須通知。

如果在此超時期限內,如果我將從設備獲得響應,則必須繼續工作並停止此超時,並且在任何持續時間內沒有限制完成此項工作。

那麼我該如何實現這個功能的東西。

任何機構,請讓我幫我實現這個超時功能的東西。

+0

我認爲唯一可行的方法是啓動一個單獨的進程,如果時間過長,則會終止進程。 「停止」在你的進程中運行的代碼是非常困難的。 – Lalaland 2012-01-31 04:30:52

回答

1

看看man 2 alarm。您可以設置或禁用一段時間後將發送到您的應用程序的信號。

+0

有沒有例子呢? – user1089679 2012-01-31 04:40:51

3

根據您如何等待此設備的響應,您的問題的答案將有所不同。基本框架是:

int do_something_with_device() 
{ 
    if (!wait_for_response_from_device()) { 
     return TIMEOUT_ERROR; 
    } 
    // continue with processing 
} 

至於如何實現wait_for_response_from_device(),好了,每個設備是不同的。如果您使用套接字或管道,請使用select()。如果你正在使用的東西,需要一個忙等待循環接口,它可能看起來像:

int wait_for_response_from_device() 
{ 
    time_t start = time(NULL); 
    while (time(NULL) - start < TIMEOUT) { 
     if (check_device_ready()) { 
      return 1; 
     } 
    } 
    return 0; 
} 

自然,check_device_ready()實施將取決於你。

+0

在這裏,我有一個功能,使我的設備進入偵聽模式,因爲我的設備已準備好通過藍牙從任何設備接收文件。在這裏我使用obex_test庫這個 – user1089679 2012-01-31 04:43:13

+0

一段時間後,如果我沒有得到響應形式遠程設備意味着(任何移動設備)比我不得不斷開這一點,並通知我的服務器 – user1089679 2012-01-31 04:43:59