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

此时,网络线程只在发生各种事件时发出()s信号,例如连接成功。 我认为这样可行,因为信号/插槽机制正确地为GUI线程发布信号。

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

有谁知道这样做的合适机制?

我目前最好的想法是让网络线程在发出一个对象之后使用QWaitCondition等待( emit passwordRequestedEvent(passwordRequest); ;. passwordRequest对象将具有特定QWaitCondition的句柄,因此可以在做出决定时发出信号) ..

这种事情是否明智? 或者还有其他选择吗?

#1楼 票数:6 已采纳

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

  ask by QLatvia translate from so

未解决问题?本站智能推荐:

2回复

Qt线程调用函数

我有一个类'A',并且在这个类中有一个方法'method1()'和method1在qthread中运行。 在method1中,我想像这样在MainWindow类中调用一个函数:'MainWindow window; window.func()' 当我这样做时,我得到以下错误消息:QObj
1回复

qt通过将对象移动到线程来跨线程发出信号

我正在寻找正确的模式以在基于Qt的应用中将其用于异步处理。 这是一个简化的类,应该接收信号 创建此类的实例是动态的(实际上也很简单-用于消息处理的对象数组)。 在主要功能中还存在一个注册: 问题是为什么从未调用过插槽? 在删除线程的东西(moveTOThread)的情况下,一切
2回复

Qt在循环中调用线程

我有一个这样的代码,函数double myfunction(double)需要很多时间才能完成。 使用 Qt ( https://doc.qt.io/qt-5/qtconcurrentrun.html ),如何使用线程为每个myfunction调用运行循环以减少计算时间? 这有意义吗?
3回复

来自线程的Qt插槽被调用了多次[重复]

这个问题已经在这里有了答案: 每次发出信号时多次调用插槽 1个答案 Qt信号和插槽连接两次……会发生什么? 3个答案 我创建了一个类CalculationManager,它具有一个公共插槽process(),它发出一个信号finish()。 它与来自gui的QTh
4回复

跨线程从QML调用QObject函数

我正在尝试确定从QML调用QObject插槽或Q_INVOKABLE方法以使QObject驻留在另一个线程中的工作方式,以及这样做是否安全。 假设有一个MainThread和ThreadA。 QObjectA驻留在ThreadA中。 QML引擎/ gui /所有内容都存在于MainThr
1回复

通过Qt中的线程调用Rust库

我正在为 Rust 库制作 Qt 前端,它公开了一个 C++ 函数,该函数阻止了它所在的执行线程,但允许传递回调函数以在两端之间进行通信。 所以我想到了使用 Qt 的线程技术来让库在另一个线程上执行,我想尽可能对 Rust 库进行最少的修改。 这是我使用 QThreads 的方法: 后端.cpp:t
2回复

跨平台如何在Qt中通过多线程写入同一文件的不同区域?

我需要一个跨平台的解决方案,以使多线程至少同时在Windows和Mac OS X上同时写入同一文件。不同的线程写入不同的文件区域。 该文件有点大。 可能是几GB或几百MB。 因此,MMF不合适。 QFile是跨平台的重叠。 我搜索了QFile文档,没有共享写入选项。 在Wind
1回复

替换Qt的信号槽连接(跨线程边界)的解决方案?

在 Qt 中,您可以: 因此,当我将一个线程中的对象的信号连接到另一个线程中的对象时,Qt 会将信号排队,并且 someSlot 将在 objectInAnotherThread 的线程中执行。 这个特殊的功能非常方便和安全,虽然可以复制数据。 C++11 中的 Lambda 很方便,但是当用纯