Linux 中的 Qt 线程问题

2023-12-28

我在我的项目中使用 Qt 进行开发已经有一段时间了,我们开始转向更加面向线程的设计。在将一些 GL 渲染小部件移动到其他线程后,我发现了一些非常奇怪的行为。看起来,如果 GL Widget 在接受用户输入的小部件(例如 QTextEdit)获取焦点之前开始从另一个线程(Boost 线程或 QThread)更新,我会得到如下所示的 XCB 崩溃:

[xcb] Too much data requested from _XRead
[xcb] This is most likely caused by a broken X extension library
[xcb] Aborting, sorry about that.
hypnotizer: ../../src/xcb_io.c:735: _XRead: Assertion ‘!xcb_xlib_too_much_data_requested’ failed.

为了测试这一点,我实际上可以对 GLHypnotizer 演示进行简单修改以重现崩溃。该演示可以在这里找到:http://qt-project.org/doc/qt-4.8/demos-glhypnotizer.html http://qt-project.org/doc/qt-4.8/demos-glhypnotizer.html[qt-project.org]

如果我在第 313 行左右添加行‘mdiArea.addSubWindow(new QTextEdit(this));’(在调用 newThread() 之前),那么当演示启动时,将会出现一个 QTextEdit 和一个 GL Hypnotizer Widget。如果我然后单击 QTextEdit 来获取焦点,我每次都会遇到上述崩溃。

任何人都可以使用上述说明在 Linux 安装上重现该错误吗?以前有人在使用 Qt 和线程的 Linux 上遇到过这些类型的问题吗?

注意:我使用的是 Ubuntu 12,此崩溃发生在 VirtualBox 和非 VirtualBox Ubuntu 安装中


OpenGL、Qt 渲染和多线程不能很好地混合。特别是,OpenGL 上下文一次只能在一个线程中处于活动状态。现在,如果上下文在多个小部件之间共享(请注意,这与在上下文之间共享对象不同,我说的是用于多个窗口/小部件的单个上下文,这是合法的)并且这些小部件从您要使用的不同线程渲染陷入很多问题。

通常,当涉及到 OpenGL 和多线程时,最好的做法是不这样做。是的,使用多线程,但将它们用于与 OpenGL 或任何类型的图形输出无关的所有内容。将所有图形操作保持在单个线程中以避免出现重大问题。

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

Linux 中的 Qt 线程问题 的相关文章

  • 如何在 Linux/OS X 上温和地终止 Firefox 进程

    我正在使用 Firefox 进行一些自动化操作 尽管我可以从 shell 打开 Firefox 窗口 但我无法正确终止它 如果我kill火狐进程与kill 3 or kill 2当我下次打开新的 Firefox 窗口时 命令会询问我是否要在
  • java中线程之间的通信:如果另一个线程完成则停止一个线程

    仅当另一个线程也在运行时 如何才能使一个线程运行 这意味着 如果我从一个线程中的运行返回 那么我希望另一个线程也停止运行 我的代码看起来像这样 ClientMessageHandler clientMessagehandler new Cl
  • 计算 TCP 重传次数

    我想知道在LINUX中是否有一种方法可以计算一个流中发生的TCP重传的次数 无论是在客户端还是服务器端 好像netstat s解决了我的目的
  • 裸机交叉编译器输入

    裸机交叉编译器的输入限制是什么 比如它不编译带有指针或 malloc 的程序 或者任何需要比底层硬件更多的东西 以及如何才能找到这些限制 我还想问 我为目标 mips 构建了一个交叉编译器 我需要使用这个交叉编译器创建一个 mips 可执行
  • C++ QT libXL 错误:“启动期间程序退出,代码为 0xc0000135”

    我正在尝试编写一个使用 libXL 的 QT 应用程序 但是当我尝试编译时 我收到一个弹出框 显示 During Startup program exited with code 0xc0000135 我已经准确地找出了哪一行导致了问题 它
  • 如何在perl中使用O_ASYNC和fcntl?

    我想使用 O ASYNC 选项 当管道可以读取时 SIGIO 的处理程序将运行 但以下代码不起作用 任何人都可以帮助我吗 bin env perl use Fcntl SIG IO sub print catch SIGIO n my fl
  • 完整的 C++ i18n gettext()“hello world”示例

    我正在寻找完整的 i18ngettext 你好世界的例子 我已经开始了一个基于的脚本使用 GNU gettext 的本机语言支持教程 https web archive org web 20130330233819 http oriya s
  • 比较linux中的两个未排序列表,列出第二个文件中的唯一项

    我有 2 个包含号码列表 电话号码 的文件 我正在寻找一种列出第二个文件中第一个文件中不存在的数字的方法 我尝试过各种方法 comm getting some weird sorting errors fgrep v x f second
  • 运行 shell 命令并将输出发送到文件?

    我需要能够通过 php 脚本修改我的 openvpn 身份验证文件 我已将我的 http 用户设置为免通 sudoer 因为这台机器仅在我的家庭网络中可用 我目前有以下命令 echo shell exec sudo echo usernam
  • 使用 WaitHandle.WaitAll 时是否可以对 ThreadPool 中的任务进行分组/隔离?

    我面临的情况如下 因为 ThreadPool 每个进程有 1 个实例 所以我的问题是方法 1 会在 3 秒后取消按方法 2 排队的任务 http请求进来 method 1 gets executed first ThreadPool Que
  • Android 上的多处理

    我一直在 Android 上执行一些测试 以验证并行化算法 如 FFT 的性能可以提高多少 我通过使用带有 JNI FFTW 的 pthread 和 Java 线程 来自 JTransforms 来实现这些算法 我没有像预期那样通过使用线程
  • 从ndk中的不同线程调用java方法

    我正在尝试使用 android 的 NDK 从 C 中的独立线程调用 java 静态方法 到目前为止我已经 JNIEnv env AttachJava jclass cls2 env gt FindClass com actvt showd
  • 如何使用bind将成员函数作为函数指针传递?

    我试图将成员函数作为函数指针传递 这样我就不需要依赖单例或全局函数来处理 Qt 5 中的 Qt 消息 据我所知 我的 std function 是正确的类型 它具有正确的签名 并且绑定应该允许我插入隐式this指针 本质上是将成员函数传递为
  • 用于获取特定用户 ID 和进程数的 Bash 脚本

    我需要 bash 脚本来计算特定用户或所有用户的进程 我们可以输入 0 1 或更多参数 例如 myScript sh root deamon 应该像这样执行 root 92 deamon 8 2 users has total proces
  • 在另一个中使用 QAbstractListModel

    我在尝试使用 Qt QML 为我的应用程序开发数据模型时遇到问题 我已经用过一个QAbstractListModel能够将海关数据模型从 C 传递到 QML 并且它对于简单模型 例如基于字符串和布尔的模型 来说就像一个魅力 但现在我需要建立
  • 当给定 100k 项时,QListView 需要很长时间才能更新

    我在读取文件时遇到问题 具体是我想制作一本小字典 在我需要阅读的文件中有这样的内容 a Ph P6 a snsr CA a b c fb Dj a b c book i BS A except B gate oOPa y a font kQ
  • 如何使用现代 OpenGL 在透视投影中绘制对象的正交轴? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有带有透视投影的 3D 场景 我还可以选择场景中的一个对象 我需要为选定的对象绘制轴 问题是轴不会在透视投影中保存其大小 如果物体远离眼睛
  • 如何在 SceneKit 中以编程方式将 png 纹理包裹在立方体周围

    我是 SceneKit 的新手 试图让一些基本的东西工作 但到目前为止还没有取得多大成功 由于某种原因 当我尝试将 png 纹理应用于 CNBox 时 我最终除了黑色之外什么也没有 这是我在 viewDidLoad 中的简单代码片段 let
  • 多线程 - 比单线程慢

    当我使用多个线程而不是单线程运行程序时 它会变慢 不是应该更快吗 该程序应该遍历从起始目录开始的所有目录 并查找并打印所有名为 X 的文件 代码如下 while done pthread mutex lock lock if list is
  • 线程安全的有限大小队列,不使用锁

    我正在尝试编写一个主题队列 但遇到死锁和其他多线程问题 我想用Interlocked CompareExchange避免lock用法 但这段代码并没有按预期工作 它只是擦除整个队列 我在这里做错了什么 public class FixedS

随机推荐

  • R:如何在一维以上使用approx(多维插值)?

    这应该不难 但我搜索了很多 到目前为止还没有找到解决方案 我正在处理一些分散的数据 y f x1 x2 x3 xn 我想创建一个查找函数 它为我提供了确切的已知值y当输入向量时x它在数据集中 但当向量时线性插值x不在数据集中 基本上喜欢ap
  • 打印fabricjs画布?

    几周来我一直在努力创建功能来打印我的 Fabricjs 画布 我已经尝试过这些方法这里提到 https stackoverflow com questions 17009946 how to print a canvas element没有
  • 如何在 C++ 程序中包含自定义文件

    如何将文件 2 包含在文件 1 中 我需要在文件 2 中进行哪些更改 file 1 include
  • Angular js 使用 $resource 下载文件并显示加载屏幕的方式

    我正在使用 Angular js 显示加载屏幕 它适用于除下载文件的 REST 服务之外的所有 REST 服务调用 我明白为什么它不起作用 因为下载时我没有使用 resource 进行任何服务调用 相反 我使用正常的方法来下载文件 因此 A
  • 如何避免调用 Application.CreateForm 两次?

    我偶然发现了这个页面为什么我不应该调用 Application CreateForm http pages cs wisc edu rkennedy createform 现在我有一些这样的代码 SplashForm TSplashForm
  • WPF:Content 和 DataContext 属性之间有什么区别?

    据我了解 DataContext property 控件使用此属性作为数据源 是每个框架元素都具有的属性 可用于将数据流入屏幕 DataContext 有范围 范围是根据 DataContext 在对象树中分配到的位置来建立的 如果您在父元
  • 如何影响部分卷页呈现的模态视图的大小?

    我需要为应用程序中的视图提供一些附加数据 并且我想使用部分页面卷曲来实现它 就像 Google 地图应用程序使用部分页面卷曲进行设置一样 我遇到的问题是所呈现的视图占据了整个屏幕 如何调整所呈现视图的大小 理想情况下 我希望它像 Googl
  • 如何渲染 OSM 瓷砖

    我想设置一个瓷砖服务器 我在网上找到了一些文档并遵循本教程 https switch2osm org serving tiles manually building a tile server 14 04 现在看来我有一个配置良好的服务器
  • JavaScript atan2() 函数未给出预期结果

    通常 极坐标从 0 到 到 2 实际上就在 2 之前 因为它又等于 0 然而 当使用 JavaScriptatan2 函数 我得到了一个不同的 奇怪的范围 Cartesian X Cartesian Y Theta 1 0 0 0 1 1
  • 运行我自制的旋转算法时得到不正确的图片输出

    为了更好地理解图像处理的工作原理 我决定创建自己的图像旋转算法 而不是使用 cv2 rotate 但是 我遇到了奇怪的图片裁剪和像素错位问题 我认为这可能与我的填充有关 但也可能有其他错误 import cv2 import math im
  • 在 MATLAB 中循环内部绘图

    我正在做这样的事情 a 1 100 for i 1 100 plot 1 i a 1 i end 我的问题是 直到循环完成后才会显示绘图 如何在每次迭代中显示 更新绘图 Use DRAWNOW http www mathworks com
  • 使用 Aurelia 的 Fetch Client 时 Azure Translator API(认知服务)上出现 CORS 错误

    我尝试使用来自 Windows Azure 的非常基本的 API 调用来翻译一些文本 他们给出了一个快速入门示例代码 https learn microsoft com en us azure cognitive services tran
  • WPF - 应用前景时默认按钮禁用样式

    按钮应用了一个Foreground当它被启用时 如果设置为Disabled 则默认Button为DisabledForeground需要申请
  • 按值传递 vs 按引用传递(两者之间内存空间分配的差异)

    在 C 中 我们使用引用传递 我们引用从参数传递到函数参数的任何地址 这本质上是一个指针 对吗 因此 虽然它们本质上是相同的东西 别名等等 但指针不是也需要内存空间吗 因此 无论我们在参数函数中拥有什么 都不应该让我们调用 B 指向所传递的
  • 多维数组符号之间的差异(object[][] 和 object[])

    我想知道在 C 中定义多维数组的两种方法有什么区别 您可以使用object and object 处理多维数组 功能上有区别吗 The object 是数组数组的表示法 第二个object 是一个二维数组 主要区别是第一个可以包含不同长度的
  • angularJS ng-model 输入类型号到 rootScope 未更新

    我的输入类型编号设置为
  • C# Decimal.GetHashCode() 和 Double.GetHashCode() 相等

    为什么会这样17m GetHashCode 17d GetHashCode m 十进制 d 双精度 另外 正如预期的那样17f GetHashCode 17d GetHashCode f 浮点数 对于 net3 5 和 net4 0 来说似
  • CSS悬停图像位置更改

    我确信这是超级愚蠢的事情 但现在我已经被困了一段时间 所以 我在网站上有图像 我希望它们在悬停时稍微移动 所以我在 HTML 中有 a href someaddress img class thumb src somefile a 在 CS
  • Dart SDK未配置

    我安装了 Flutter 并设置了 Android Studio 然后我在 GitHub 上克隆了一个 flutter 的示例 https github com flutter flutter https github com flutte
  • Linux 中的 Qt 线程问题

    我在我的项目中使用 Qt 进行开发已经有一段时间了 我们开始转向更加面向线程的设计 在将一些 GL 渲染小部件移动到其他线程后 我发现了一些非常奇怪的行为 看起来 如果 GL Widget 在接受用户输入的小部件 例如 QTextEdit