我有一个Qt / C ++应用程序,具有通常的GUI线程和网络线程。网络线程正在使用外部库,它有自己的基于select()的事件循环...所以网络线程没有使用Qt的事件系统。
此时,网络线程只在发生各种事件时发出()s信号,例如连接成功。我认为这样可行,因为信号/插槽机制正确地为GUI线程发布信号。
现在,我需要网络线程能够调用GUI线程来提问。例如,网络线程可能要求GUI线程请求建立对话框,以请求密码。
有没有人知道这样做的合适机制?
我目前最好的想法是在发出一个对象(emit passwordRequestedEvent(passwordRequest);
之后让网络线程使用QWaitCondition等待.passwordRequest对象将具有特定QWaitCondition的句柄,因此可以在做出决定时发出信号已被制作..
这种事情是否明智?或者还有其他选择吗?
答案 0 :(得分:6)
使用信号在线程之间发送消息很好,如果你不喜欢使用条件变量,那么你可以以一种或多或少的异步方式在两个方向发送信号:如果你这可能是一个更好的选择想要在等待GUI回复的同时继续处理网络内容。