QThread内的睡眠功能

Posted

技术标签:

【中文标题】QThread内的睡眠功能【英文标题】:sleep function inside QThread 【发布时间】:2012-04-16 02:51:41 【问题描述】:

做了很多研究,但找不到答案。我有一个应用程序,它是通过创建从 QObject 派生的实例构建的,我将这些实例移动到不同的线程。在这些“线程”中,我有一个 QNetworkAccessManager,我在其中请求天蓝色。我现在的问题是我有一些重试逻辑正在快速发生。例如,如果容器不存在,则需要创建它以重试请求(放置 blob)。问题是如果在容器创建后 put blob 请求发生得太快,它将无法上传任何内容。另外,我想增加重发之间的时间,这样它们就不会发生在彼此之后很快。强制线程从自身内部休眠的最佳方法是什么?

【问题讨论】:

【参考方案1】:

我可能最终会使用 QTimer 和信号/插槽的某种组合。例如:

// Slot
void retry()  ... 

...

// Execute retry code in 1 second:
QTimer::singleShot( 1000, this, SLOT(retry()) );

【讨论】:

怎么样?在哪里?试图在函数中使用它,但不允许 我认为要使用 QThread::sleep() 你必须从 QThread 派生你的类 @chikuba 是的,它必须是一个插槽【参考方案2】:

使用QThread::wait()

【讨论】:

然后我可以这样做->thread()->wait(x) 吗?在 objecthirerchy 中移动到单独线程的函数之一内? 如果this->thread() 是您的函数正在运行的线程,我会说是的。试试看吧。

以上是关于QThread内的睡眠功能的主要内容,如果未能解决你的问题,请参考以下文章

唤醒一个处于睡眠状态的 QThread?

驻留在 QThread 内的 QObjects 会自动删除吗?

为啥我的 QThread 正在使主线程挨饿?

Qt之QThread随记

如何终止 QThread?

Qt系列文章之二十八(基于QThread多线程概述)