我不确定Qt 4.5中信号/插槽机制的性质.发出信号时,它是阻塞函数调用还是线程?说这个
emit GrabLatestData();
// proceed with latest data
Run Code Online (Sandbox Code Playgroud)
在继续下一行之前,是否会解决所有信号/槽链?
小智 27
最大的问题是你无法知道.也就是说,如果你从班级的角度来看.当你发射时,你不知道会发生什么:
如果多个对象连接到信号会发生什么会变得更加困难.在这种情况下,某些插槽可能已运行而其他插槽仍在排队.顺便说一句,没有涉及非阻塞连接的线程.只有一个事件会在接收对象的线程的事件循环中发布.
拉尔托的答案是正确的.还有一点:如果你的所有QObject都属于同一个线程并且你没有手动指定排队连接,那么连接到信号的插槽的执行同步发生 - 所有处理都将在'emit'之后的下一行之前完成'声明.由于这是最常见的情况,因此您的问题的答案通常是"是".
跨多个线程的信号和插槽的文档可能对您有所帮助.