有什么方法可以使用C调用定时函数吗?即我们将等待函数返回指定的时间

问题描述

有什么可以使用C调用定时函数方法吗?也就是说,我们将等待函数返回指定的时间。

解决方法

C本身并不能直接做到这一点,因此有多种方法可以满足这种需求。

使函数本身具有时间感。这通常是解决方案中最好的第一线部分,因为如果花费的时间太长,正是函数本身可以轻松地失败。任何循环都会检查经过的时间。通常情况下,实际上“卡住”的是阻塞系统调用,因此,您将希望使用具有超时功能的版本,将自己与部分缓冲区串联的非阻塞版本,或者使它们取决于select()机制。 )或poll()

使用另一个线程来观看时间。这里的问题是,调用花费太长时间的线程会发生什么情况?终止线程的方法是尴尬,有时甚至没有在更简单的嵌入式Linux中实现。这可能意味着您可以设置一个标志告诉您您不再对线程的结果感兴趣,而不是实际停止线程,并且它应该在第一个(以后)机会返回。简而言之,除了诸如工作线程池产生异步结果之类的情况外,使用线程并不像最初看起来的那样干净,因为“如果花费太长时间怎么办?”情况不佳。

使用监控线程或守护程序监视整个过程。这是一个非常常见的解决方案,因为在发生故障的情况下,您可以终止并重新启动整个过程-某个过程是将其设计为适当独立的操作系统软件状态的单位,因此重新启动整个软件比尝试强制终止并重新启动一个软件要干净得多。

在整个系统上放置看门狗。看门狗是一种硬件或(内核级)软件计时器,如果未按固定的时间间隔“服务”,它将触发重新启动-通常是因为应该执行服务的任务被阻止或意外退出。因为强制重启会导致文件系统状态损坏,所以通常最好将其用作最后一种手段,只有在循环或进程级别的超时未能防止阻塞的情况下才激活。通常,这是为了捕获意外的故障模式,而那些不太激烈的方法则从源头捕获了预期的故障模式。还要注意,如果从用户模式程序运行看门狗,则需要手动停止该程序进行维护,以确保看门狗的安全。您通常希望程序在自己的出口处停止看门狗,除非您确定只发生在希望程序停止的代码路径中。


如果有可能,请使用第一种方法来使函数本身受时间限制,然后出于安全考虑,将其包装在过程或系统级的监视中以进行回退。