Qt:如何执行超时函数

Posted

技术标签:

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

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

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

【问题讨论】:

***.com/questions/19903139/…的可能重复 是的。在 Qt 中寻找原生解决方案,例如带有超时选项的 concurrent::run()。好像不可用。 函数有副作用吗?然后它需要“合作”以确保安全,即定期检查它是否应该退出。 【参考方案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 */

【讨论】:

以上是关于Qt:如何执行超时函数的主要内容,如果未能解决你的问题,请参考以下文章

Qt中多个定时器共享一个槽函数,怎么确定是哪个定时器超时呢?

当变量在 QML 中更改其值时,如何在 Qt 中执行函数?

qt中如何实现多线程?

如何在X毫秒后超时python函数?

qt中如何实现多线程?

函数调用超时