【问题标题】:Qt: How to execute a function with timeoutQt:如何执行超时函数
【发布时间】:2013-11-22 08:53:50
【问题描述】:

在 Qt 中,执行具有特定超时的函数的最简单方法是什么?(最好在不同的线程中)

如果函数在特定时间内没有返回,则返回错误。

【问题讨论】:

  • 是的。在 Qt 中寻找原生解决方案,例如带有超时选项的 concurrent::run()。好像不可用。
  • 函数有副作用吗?然后它需要“合作”以确保安全,即定期检查它是否应该退出。

标签: multithreading qt


【解决方案1】:

使用QTimer 创建一个一次性计时器,当它触发时,通过将 timeout() 信号连接到另一个线程对象的插槽,向另一个线程上的接收对象发送一个信号。

然后,将同一个定时器的超时时间连接到当前线程中的一个槽位,以启动一个超时错误定时器。如果其他线程返回,则停止错误计时器。

【讨论】:

    【解决方案2】:

    静态方法QTimer::singleShot可以不用创建QTimer就可以做到:

    void MyClass::start() {
        int timeout = 500; // msecs
        QTimer::singleShot( timeout, this, SLOT(mySlot());
    }
    
    void MyClass::mySlot() {
        /* Start your thread or whatever */
    }
    

    【讨论】:

      猜你喜欢
      • 2021-09-16
      • 2011-09-21
      • 1970-01-01
      • 2018-08-23
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 2014-05-10
      • 2013-10-23
      相关资源
      最近更新 更多