想要在C中实现一个函数的超时

use*_*679 6 c

这里我有一个功能,它是监听模式.这个函数列出了我从某些设备获得的东西.

这时当我的函数处于侦听模式时,我想创建超时.如果我不会从特定设备得到任何响应,我想要退出此功能并且必须通知.

如果在此超时期间,如果我将从设备获得响应,那么我必须继续工作并停止此超时,并且在任何持续时间内完成此工作没有限制.

那么我该如何为一个函数实现这个东西呢.

请问我可以帮助我实现具有超时功能的这个东西.

Gre*_*ill 5

根据您等待该设备响应的方式,您的问题的答案将会有所不同。基本框架是:

int do_something_with_device()
{
    if (!wait_for_response_from_device()) {
        return TIMEOUT_ERROR;
    }
    // continue with processing
}
Run Code Online (Sandbox Code Playgroud)

至于如何实施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;
}
Run Code Online (Sandbox Code Playgroud)

当然,具体的实施check_device_ready()取决于您。


Bor*_*lid 3

看一眼man 2 alarm。您可以设置或禁用在一段时间过后发送到您的应用程序的信号。