我不知道的信号/槽机制的使用Qt 4.5的本质。 当一个信号被发射时,它是一个阻塞函数调用或线程? 说这个
emit GrabLatestData();
// proceed with latest data
将所有的信号/槽链进行下一行之前得到解决?
我不知道的信号/槽机制的使用Qt 4.5的本质。 当一个信号被发射时,它是一个阻塞函数调用或线程? 说这个
emit GrabLatestData();
// proceed with latest data
将所有的信号/槽链进行下一行之前得到解决?
这取决于。 从文档 :
当一个信号被发射时,与它相连的槽通常是立即执行的,就像普通的函数调用。 当发生这种情况时,信号和槽机制是完全独立于任何GUI事件循环。 下面的代码的执行
emit
声明,一旦所有插槽返回会发生。 这种情况是当使用稍微不同的排队的连接 ; 在这样的情况下,继发射关键字代码将立即继续,和槽将在后面执行。
所以在正常情况下,这将是同步和阻断,并用排队连接这将是异步的,非阻塞的。
最大的问题是,你只是不知道。 也就是说,如果你从类的角度看。 当你发射,你不知道会发生什么:
它变得更加难以知道,如果多个对象连接到信号会发生什么。 在这种情况下,而另一些仍在排队,有些插槽可能已经运行。 还有就是,顺便说一下,没有线程参与无阻塞连接。 只是有这么被张贴在接收对象的线程的事件循环的事件。
上述laalto的答案是正确的。 另一点是:如果所有的QObject的属于同一个线程,你有没有手动指定排队的连接,然后连接到信号时隙同步执行发生 - 所有处理都将在下一行之前之后进行的“EMIT “声明。 因为这是最常见的情况,回答你的问题,通常是“是”。
在该文档在多个线程的信号和槽可能会对你有所帮助。