2010-05-29 91 views
4

我有一个Qt/C++应用程序,通常的GUI线程和一个网络线程。网络线程正在使用一个外部库,它有自己的基于select()的事件循环...所以网络线程没有使用Qt的事件系统。Qt跨线程调用

目前,网络线程只是在发生各种事件(如连接成功)时发出()s信号。我认为这可以正常工作,因为信号/插槽机制正确地为GUI线程发布信号。

现在,我需要网络线程能够调用GUI线程来提出问题。例如,网络线程可能要求GUI线程请求建立一个对话框来请求密码。

有没有人知道这样做的适当机制?

我现在最好的想法是让网络线程在发送一个对象后使用QWaitCondition等待(emit passwordRequestedEvent(passwordRequest);。passwordRequest对象将在特定的QWaitCondition上有一个句柄,所以可以在做出决定时发出信号。 。

是这种明智的做法?还是有其他的选择吗?

回答

6

使用信号线之间发送消息是好的,如果你不喜欢使用的条件变量,那么您可以在这两个发送信号方向或多或少的异步方式:如果您希望在等待GUI响应时继续处理网络内容,这可能是更好的选择。