【问题标题】:What method is usually used to detect the time case?通常使用什么方法来检测时间情况?
【发布时间】:2019-02-28 19:13:01
【问题描述】:

有一个API可以让我获取一些数据,比如:

int API_func(pointer * data)

返回值用于判断函数是否执行完毕,将数据写入指针地址; 但是如果出现问题,API_func 可能无法返回,程序可能会卡住,所以我需要一个定时器来计算调用 API_func 时的定时器,一旦超过 30s,我需要向 GUI 发送信号,所以如何我可不可以做? 我是新手,想知道大师是怎么做的? 我的方法是:

Thread_1:主线程,在这里调用API,

Thread_2:定时器线程,包含一个定时器函数

当 Thread_1 调用 API 时,发送 msg(FIFO) 以激活 timer Thread 的 timer 功能,如果 API 不能返回成功,则 Thread_2 的 timer 会超时,然后发送 msg 到 GUI?

有更好的方法吗?非常感谢! 对不起,我是stackoverflow的新手,所以我不知道如何表达我的意思: 假代码:

 Thread_1:
    set_timer_flag_on(FILE *time_flag_1)
    API_func()
    Thread_2:
    if (1==check_timer_flag(FILE *time_flag_1))
    {
        timer_func(set_over_time);
    }

【问题讨论】:

  • 所以你有一个解决方案,它唯一的缺点是不涵盖时间情况。请出示该代码;类似于minimal reproducible example,除了错误情况很难证明之外。 IE。显示处理正常情况的代码。做一个简化的例子,使用例如伪代码/* this is where an endless loop might occur */.
  • 我添加了一些假代码,也许有助于理解我的意思。我想知道的是方法,而不是如何编码,非常感谢。

标签: c++ c linux


【解决方案1】:

您可以在单独的线程中调用int API_func(pointer* data),并通过条件变量向主线程发出信号。对于int API_func(pointer* data),您编写一个包装器。 How to implement timeout for function in c++

中有一个示例

【讨论】:

  • 非常感谢!我是新手,上面的方法是我自己设计的,没有任何人帮助,所以我怕我的方法可能是傻瓜。根据你的建议,使用多线程是正常的方法,我知道怎么做,谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-03-07
  • 1970-01-01
  • 2014-09-29
  • 2015-12-15
  • 2011-05-30
  • 1970-01-01
  • 2019-09-05
  • 1970-01-01
相关资源
最近更新 更多