我不确定Qt 4.5中信号/槽机制的性质。当一个信号被发射时,它是一个阻塞的函数调用还是一个线程?请说明。
emit GrabLatestData();
// proceed with latest data
在进入下一行代码之前,所有信号/槽链都会被解决吗?
如果多个对象连接到信号,那么要知道会发生什么就更加困难。在这种情况下,有些槽可能已经运行,而其他槽仍然在队列中。 顺便提一下,非阻塞连接中没有涉及线程。只需要在接收对象的线程的事件循环中发布一个事件。
laalto的回答是正确的。不过还有一点:如果所有的QObjects都属于同一个线程,并且您没有手动指定排队连接,则与信号连接的槽函数的执行是同步的 - 在“emit”语句之后的下一行代码执行之前,所有处理都将完成。因为这是最常见的情况,所以通常对您的问题的答案是“是”。
关于跨多个线程的信号和槽的文档可能对您有所帮助。