【问题标题】:Implementing timer callback in c在c中实现定时器回调
【发布时间】:2015-04-24 11:31:20
【问题描述】:

我是 C 中回调函数的新手。我想创建一个定时回调。

场景:我想要一个定时器函数,它会在定时器到期时触发回调函数。例如,每 5 秒计时器到期并调用该函数。

我应该如何解决这个问题?

【问题讨论】:

  • 到目前为止,您自己尝试过什么?它是如何(或没有)工作的?您是否有更具体的问题或想知道(例如函数指针、计时器、线程或其他东西)?
  • 实际上我需要一个程序,该程序将从我的 wifi 适配器发送信标帧以进行同步...所以我需要每 5 秒发送一次信标帧...在这之间,我发送一些其他数据! ...所以定时器功能不应该阻塞它,直到它的 5 秒......我厌倦了在发送每个数据包之前检查时间......但这不是一种有效的方式
  • 是否必须每五秒一次准确地?或者每五秒 about 可以吗?因为如果大约每五秒一次就可以了,那么你就有一个很好的解决方案(当你发送另一个数据包时,检查距离你上次发送特殊数据包是否至少五秒)。
  • 否则您可以使用线程或SIGALRM 实现计时器,但这会增加其他问题和复杂性(例如您需要同步、消息队列或特殊标志)。
  • 我只需要 5 秒……我的意思是每 5 秒执行一次,具有高优先级……因此,当计时器到期时,此输入将调用同步函数……希望您能理解!

标签: c linux timer callback


【解决方案1】:

您应该如何解决这个问题?

与所有问题一样:

  • 准确地弄清楚你想做什么
  • 问问自己,如果需要(如果可以的话),你会如何自己做
  • 尝试将上一步形式化为尽可能接近单个陈述句,一次一步。
  • 确定是什么阻碍了您/您不知道该怎么做。对此进行一些研究。

你想要做什么

您想“创建一个定时回调”。我认为这意味着:

  • 你有一个函数 foo 在做一些工作
  • 您的程序正在运行
  • 您希望能够在程序中的任何位置说“从现在开始,在 X 毫秒内,调用 foo

你自己会怎么做?

我想你会,例如,启动一个秒表 X 毫秒,然后继续做你正在做的事情。当秒表到达零时,你停止你所做的事情并做需要做的事情。最后,继续你正在做的事情。

什么阻碍了你?

从你的问题来看,我认为有两件事阻碍了你:

  • 您需要了解如何在 C 中进行函数回调。请参阅“函数指针”
  • 您需要了解如何使用计时器并在计时器归零时执行某些操作。

一些谷歌搜索会帮助你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 2014-08-25
    • 2013-03-04
    相关资源
    最近更新 更多