2014-06-18 49 views
2

函数调用我在Qt的4.8(窗口),其中有3个事情做,这样的功能:推迟的Qt

void f() 
{ 
    //1. Do initialization 

    //2. Defer g() for next event (on the same thread) so that it may execute after f() is over 

    //3. Call h() which is time consuming 
} 

现在,我不知道如何实施第二步,即如何确保g()在调用f()完成后在同一线程上(但在不同的堆栈上)被调用。我尝试使用QTimer,但是如果我提供短时间,例如10毫秒,即使f()还没有完成执行,也会调用功能g()。所以,依靠定时器似乎并不是一个可靠的想法。请帮助,任何想法都非常感谢。

+0

这是什么意思'在同一个线程(但在不同的堆栈)'? –

+0

是什么阻止你在''f()''之后调用'g()'**,而不是从'f()'调用'g()'? – vahancho

+0

所以,我希望从下一个消息循环的事件堆栈调用g(),这意味着不是在这个时候调用g(),而是只是在消息循环中发布一个事件,并在以后调用当前事件处理做完了。我希望它澄清事情。 – Aarkan

回答

3

使g()一个槽或Q_INVOKABLE。然后使用QMetaObject::invokeMethod(this, "g", Qt::QueuedConnection)