【问题标题】:C++ timeout functionC++ 超时函数
【发布时间】:2014-05-01 19:15:15
【问题描述】:

我想在 Atmel 评估套件上用 C++ 实现超时功能。

程序应该打开函数“start()”,如果这个函数没有在“0.5s”内完成,它应该被杀死。

是否有任何现有的功能可以做这样的工作?

注意 matl

【问题讨论】:

  • 尝试在被调用者中使用睡眠,睡眠后返回调用者
  • 看看std::asyncstd::chrono
  • @AliKazmi:睡眠功能需要操作系统。嵌入式系统可能没有操作系统。
  • @OMGtechy std:chrono 给我一个函数的时间段,但如果它因为例如大计算或错误而挂在函数中,我无法终止该函数,因为我会得到结果太晚了。

标签: c++ timeout microcontroller atmel


【解决方案1】:

是的:std::future::wait_for。你会得到future_status::readyfuture_status::timeout

【讨论】:

  • 这只能在 C++11 中实现(-std=c++11 或 -std=c++0x 取决于编译器)。在 C++03 上,您必须使用操作系统调用(如果有)或通过中断实现它
  • @elvis.dukaj:当然。但是这个问题没有被标记为 C++03 或 C++14,所以合理的假设是今天定义的 C++。
【解决方案2】:

根据我的经验,这些功能总是手工制作的,因为在嵌入式系统中,目标系统不是标准化的。

您可以购买操作系统并使用消息超时和休眠等方法。

如果没有操作系统,您必须使用定时器和定时器中断 (ISR) 自己制作功能。

【讨论】:

  • 是否有任何建议如何使用定时器和定时器中断创建超时?目前我不知道如何实现这样的事情。如果程序挂在函数 start() 中,我如何访问计时器数据?也许这只是推理的错误,但我现在不明白。
  • @matl 它对硬件非常具体。您必须参考环境提供的库
猜你喜欢
  • 2020-05-05
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 2012-06-18
  • 2014-05-10
  • 2017-03-25
  • 2021-07-29
  • 2023-03-23
相关资源
最近更新 更多