提问人:Eric Qiang 提问时间:10/28/2023 最后编辑:Eric Qiang 更新时间:10/29/2023 访问量:56
Qt5:如何等待线程中的信号(带滤波器)?
Qt5: How to wait for a signal (with filter) in a thread?
问:
我已经阅读了帖子如何等待线程中的信号,但仍然有一些困惑:
如果我想等待带有参数的信号,并根据某些特定条件过滤传入信号,该怎么办?
假设我们有signal: triggered(int i)
QTimer timer;
timer.setSingleShot(true);
QEventLoop loop;
connect( this, &MyClass::triggered, &loop, [&](int i) {
// only 123 would stop the event loop, otherwise keep waiting until timeout
if (i == 123)
loop.quit();
} );
connect( &timer, &QTimer::timeout, &loop, &QEventLoop::quit );
timer.start(msTimeout);
loop.exec();
if(timer.isActive())
qDebug("Got 123! It may not be carried by the first incoming signal.");
else
qDebug("timeout");
问题:
- 对于第一个连接到 lambda 的参数,第三个参数是否必要?
connect
&loop
- 首先,我应该在某个地方吗?
connect
disconnect
- 我看到一些评论提到内在应该非常小心地使用,为什么?我是否以正确的方式这样做?
QEventLoop
- 班级能做到这一点吗?
QSignalSpy
- 是否可以将其重写为可重用的标题模板?例如:
waitForTimeout(QObject* sender, Func1 signal, Func2 predicate, int msec)
答: 暂无答案
评论
&loop
QObject*
loop
&loop
connect
&loop
loop
&loop
QSignalSpy
用于测试。我不确定它应该如何帮助这里。我什至不确定“实现此”中的“此”是什么。还有什么问题有待解决?&loop
connect
QSignalSpy.wait