我正在尝试让QTimer
工作,并在单独的线程中运行时发出适当的信号。我不知道应该怎样做以便发出timeout()
信号。
当我尝试使用QFuture
和QFutureWatcher
时,他们不会抛出他们的finished()
信号,因为这个线程永远不会真正结束,它只会保持循环。
这就是我现在拥有的。任何建议将不胜感激!
Foo.cpp中
Foo::Foo() {
...
mcTimerForSpoilers = new QTimer(this);
connect(mcTimerForSpoilers, SIGNAL(timeout()), this, SLOT(queueDownloadOfSpoilerFile()), Qt::QueuedConnection);
QtConcurrent::run(this, &Foo::manageSpoilerTimer);
}
void Foo::manageSpoilerTimer() {
...
mcTimerForSpoilers->setInterval(5000); // 5 seconds
mcTimerForSpoilers->start();
}
void Foo::queueDownloadOfSpoilerFile() {
...
std::cerr << "Queue Download" << std::endl;
manageSpoilerTimer(); // Restart the timer
}
答案 0 :(得分:2)
你的设计错了。您可以调用QtConcurrent::run(this, &Foo::manageSpoilerTimer);
,但只能从自己的线程启动计时器。
此外,你没有指定一个间隔,所以定时器会持续发射,但是每次超时都会继续启动定时器。
目前尚不清楚你真正想做什么。看起来你不知道自己在做什么。
我不认为QtConcurrent
是开始下载的好选择。它不支持进度跟踪,暂停或取消,这些都是下载内容应该使用的功能。您应该选择基于QObject
的线程化工作者,如this answer中所述。