這裏我有一個函數是監聽模式。這個函數列出了我從某些設備上獲得的東西。想要在C中實現一個函數的超時
這裏當我的功能處於監聽模式時,我想創建超時。如果我不會從特定設備得到任何迴應,那麼我會退出此功能並且必須通知。
如果在此超時期限內,如果我將從設備獲得響應,則必須繼續工作並停止此超時,並且在任何持續時間內沒有限制完成此項工作。
那麼我該如何實現這個功能的東西。
任何機構,請讓我幫我實現這個超時功能的東西。
這裏我有一個函數是監聽模式。這個函數列出了我從某些設備上獲得的東西。想要在C中實現一個函數的超時
這裏當我的功能處於監聽模式時,我想創建超時。如果我不會從特定設備得到任何迴應,那麼我會退出此功能並且必須通知。
如果在此超時期限內,如果我將從設備獲得響應,則必須繼續工作並停止此超時,並且在任何持續時間內沒有限制完成此項工作。
那麼我該如何實現這個功能的東西。
任何機構,請讓我幫我實現這個超時功能的東西。
根據您如何等待此設備的響應,您的問題的答案將有所不同。基本框架是:
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()
實施將取決於你。
在這裏,我有一個功能,使我的設備進入偵聽模式,因爲我的設備已準備好通過藍牙從任何設備接收文件。在這裏我使用obex_test庫這個 – user1089679 2012-01-31 04:43:13
一段時間後,如果我沒有得到響應形式遠程設備意味着(任何移動設備)比我不得不斷開這一點,並通知我的服務器 – user1089679 2012-01-31 04:43:59
我認爲唯一可行的方法是啓動一個單獨的進程,如果時間過長,則會終止進程。 「停止」在你的進程中運行的代碼是非常困難的。 – Lalaland 2012-01-31 04:30:52