在 Qt GUI 事件线程中检测到“我正在运行”

2024-01-03

我有这个功能来更新一些 GUI 的东西:

void SavedConnections::renderList()
{
  // Do GUI stuff! Must run in Qt thread!!!
    ...
}

我需要确保该函数不会从其他线程调用。我打算做的是将其推迟到事件循环中并发出警告:

void SavedConnections::renderList()
{ 
  if(!this_thread_is_Qt_GUI_thread()) {
    qDebug()<< "Warning: GUI operation attempted from non GUI thread!\n";
    QCoreApplication::postEvent(this, new UpdateGUIEvent());
    return;
  }
  // Do GUI stuff! Must run in Qt thread!!!
    ...
}

这种模式也非常方便地创建保证在 GUI 线程中异步运行的方法,而无需任何丑陋的语法。我已经问过关于 Java 的 ExecutorService 的类似问题 https://stackoverflow.com/q/34798891/607407.


您可以检查当前线程是否是您的对象所在的线程:

if (QThread::currentThread() != this->thread()) {
   // Called from different thread
}

注意这可能不是主要的 GUI 线程!这是线程this住在(见QObject 线程亲和性) http://doc.qt.io/qt-5/qobject.html#thread-affinity。如果你不改变它使用QObject::moveToThread,它是创建对象的线程。

这也是QCoreApplication::postEvent用于确定应将事件发布到哪个线程。目标线程必须运行QEventLoop响应该事件。

因此检查主 GUI 线程(qApp->thread()),但张贴到this如果您的对象不在主 GUI 线程中,则 的线程可能无法工作。然而,如果你在那里做 GUI 的事情,它无论如何都应该存在于 GUI 线程中

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Qt GUI 事件线程中检测到“我正在运行” 的相关文章

  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 重新索引不填充 NaN

    我有一个系列 index pd MultiIndex from tuples bar one bar two baz one baz two foo one foo two qux one qux two names first secon
  • 如何使用 DDay.iCal 在 iCal Feed 中设置时区?

    我正在使用创建 iCal feedDDay iCal http www ddaysoftware com Pages Projects DDay iCal 它有效 但我不知道如何设置提要的时区 这是基本代码 iCalendar iCal n
  • FMDB 和加密

    我正在使用 FMDB 来处理 sqlite 并且我希望避免对 SQLCipher 的依赖 如何简单地利用 iOS 内置的 DataProtection 功能 这可能吗 唯一的要求是在手机被盗时保护数据 如果手机使用 PIN 码解锁 则用户可
  • HTML5 画布:调整图像大小

    我正在尝试将图像放置在画布上而不调整其大小 我认为 drawImage img x y 可以解决问题 但它会拉伸图像以填充画布 另外 向 drawImage img x y width height 提供图像的尺寸似乎不起作用 这是我的代码
  • 如何从Openfire获取群聊的离线消息

    有什么办法可以进入xmpp我得到的离线消息MultiUserChat 当我的用户登录并加入房间时 我想要实现群聊 like WhatsApp 还有其他方法可以实现这个请建议 提前致谢 至少在ejjaberd当您进入聊天组时 您必须输入您的最
  • 使用 Jsoup 和适当的 cookie 登录 Facebook

    我目前正在尝试自动废弃我自己的主页以及我登录 Facebook 时可以访问的其他可能页面 但是 在使用下面的代码并设置 cookie 后 我似乎无法 登录 Connection Response res Jsoup connect http
  • 为什么在链表中间插入是O(1)?

    根据维基百科关于链接列表的文章 http en wikipedia org wiki Linked list Linked lists vs arrays 在链表中间插入被认为是 O 1 我认为这将是 O n 您是否不需要找到可能靠近列表末
  • 如何选择DI容器? [复制]

    这个问题在这里已经有答案了 可能的重复 主要 C DI IoC 框架如何比较 https stackoverflow com questions 4581791 how do the major c sharp di ioc framewo
  • .War 可以在 Windows 上部署,但无法在 Linux 服务器 (Tomcat 7) 上部署

    正如标题所介绍的 我尝试使用 Tomcat 7 部署的 War 文件无法在运行 Linux 的计算机上运行 它确实可以在 Windows 上运行 并且当然可以使用 Tomcat 7 进行部署 我试图单独追踪这个问题并在网络上搜索相关问题 包
  • 回显但保留双引号

    我正在尝试创建一个脚本 它将变量 文本回显到文件中 该脚本的一个片段是 echo SUBJECT Text here EMAIL email protected cdn cgi l email protection EMAILMESSAGE
  • 如何修复实体和 POJO 必须有可用的公共构造函数

    当我尝试在使用 sqlite 数据库时启动我的应用程序时 出现此错误 我在不同的文件中有 3 个数据类 Entity tableName movies data class MovieNews PrimaryKey autoGenerate
  • 由于尝试调用虚拟方法“java.lang.String android.content.Context.getPackageName()”,意图失败

    我拥有的 我有一个 RecyclerView 其中包含酒吧 咖啡店的图像 ETC 我想要的 当您单击这些图像之一时 我会向您显示所选位置的信息 但是在您单击所选图像时 应用程序崩溃并显示此错误 尝试调用虚拟方法 java lang Stri
  • 单击 JTextField 中的图标并清除其内容

    我正在尝试创建一个带有图像和提示的 JTextField 文本字段的功能是一个搜索字段 用于搜索一些书籍 现在 我想走得更远一点 我想赋予图像一个功能 例如 如果我单击图像 文本字段中的文本应该被清除 为了实现此实现 我创建了一个新类并使用
  • JS Analytics 电子商务回调

    我找不到任何地方如何使用hitCallback谷歌分析参数ecommerce send 在文档中 它唯一的例子是send pageview 这是我尝试过的代码 ga ecommerce send hitCallback function w
  • 在 python 中使用多个参数进行日志记录

    在 python 日志记录模块中 日志的格式如下 formatter logging Formatter asctime s name s levelname s message s simple example py applicatio
  • 为什么 Angular Guards canActivate 方法总是返回 false?

    我在登录后对用户进行基本身份验证 但发生了奇怪的行为 canActivate 返回 false 即使它是在正确的时间调用的 in 登录组件 private login this authService login this loginFor
  • 加载目录中的所有图像

    我的目录中有某些图像 我想加载所有这些图像来进行一些处理 我尝试使用load功能 imagefiles dir F SIFT Yantao demo data jpg nfiles length imagefiles Number of f
  • 单一资源的 Rails 嵌套路由

    我在单一资源上有一个嵌套路线 map resource account controller gt users do page page resources feeds end 我正在尝试制作一个表单来添加提要 我从这个开始 undefin
  • 一个 EC2 实例下的多个 WordPress 多站点 (AWS)

    我们正在尝试为一个 EC2 实例下的多站点配置 DNS 路由 具体来说 我们正在设置 WordPress 多站点的开发 测试和 UAT 环境 我们在这个网络上只有 2 个站点 主站点和一个网站 现在 我已成功将生产站点 在不同的 EC2 实
  • 在 Qt GUI 事件线程中检测到“我正在运行”

    我有这个功能来更新一些 GUI 的东西 void SavedConnections renderList Do GUI stuff Must run in Qt thread 我需要确保该函数不会从其他线程调用 我打算做的是将其推迟到事件循