【问题标题】:Want to Implement Timeout for one function in C想在 C 中为一个函数实现超时
【发布时间】:2012-01-31 12:36:57
【问题描述】:

这里我有一个功能是监听模式。这个函数列出了我从某个设备得到的东西。

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

如果在此超时期间我会收到来自设备的响应,那么我必须继续工作并停止此超时,并且在任何时间段内完成此工作都没有限制。

那么我怎样才能为一个函数实现这个东西。

任何机构都可以帮我实现这个具有超时功能的东西。

【问题讨论】:

  • 我认为唯一明智的方法是启动一个单独的进程,如果时间过长,你可以将其终止。很难“停止”在进程中运行的代码。

标签: c


【解决方案1】:

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

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 库
  • 一段时间后,如果我没有收到远程设备的响应,则意味着(任何移动设备)我必须断开连接并通知我的服务器
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-25
    • 2013-05-06
    • 2021-01-21
    • 2012-04-26
    • 2010-10-27
    • 2014-05-23
    • 2022-10-04
    相关资源
    最近更新 更多