让程序在Qt中等待信号的最简单方法是什么?

时间:2016-12-13 13:07:13

标签: c++ qt asynchronous wait signals-slots

所以我在Qt中知道,你可以把信号发送到插槽后放到你想要的所有东西,但是稍后编辑代码时;这可能需要大量重组,并可能使事情复杂化。

有没有一种更简单的方法来保存程序,直到在Qt中发出信号,比如说:

downloadImage();
Qt::waitForSignal(downloadImageFinished());
editImage();

也;为什么不喜欢这样的工作:

// bool isFinished();
downloadImage(); // When done, isFinished() returns true;
while (!isFinished()) {}
editImage();

?感谢。

1 个答案:

答案 0 :(得分:5)

基本上,你应该这样做:

    QEventLoop loop;
    connect(this, &SomeObject::someSignal, &loop, &QEventLoop::quit);
    // here you can send your own message to signal the start of wait, 
    // start a thread, for example.
    loop.exec(); //exec will delay execution until the signal has arrived

在一个循环内等待将你的执行线程置于螺旋锁的厄运中 - 这不应该在任何程序中发生。不惜一切代价避免螺旋锁 - 你不想处理后果。即使一切正常,请记住,您只需为自己购买整个处理器内核,在此状态下显着延迟整体PC性能。