草庐IT

QT多线程

全部标签

c++ - Qt 小部件在某些情况下无法重新绘制

我遇到了一个奇怪的问题,一个小部件长时间无法重新绘制。我有一个非Qt线程播放音频并根据音频播放位置定期向我的GUI线程发送自定义事件。GUI线程通过生成一些视觉反馈(例如,在小部件顶部显示标签)并在其自身上调用repaint()来使用react。这在MacOSX上运行良好,在我拥有的单元测试应用程序中运行良好,该应用程序在Windows(XP和7)上运行该功能,但是,该小部件在我的真实应用程序(在WindowsXP/7上)无法正确重绘,直到音频播放结束。在OSX和我的单元测试中观察到的正确行为:->CustomEvent->QEvent::Paint(12)->CustomEvent-

c++ - 让 gprof 从 Qt 调试应用程序读取 gmon.out 输出的问题

我正在尝试分析我正在开发的Qt窗口应用程序,并且已经阅读了使用gprof进行分析的方法。我已经成功地将项目配置为编译并与-pg标志链接以启用分析,并且每次执行应用程序时都会输出gmon.out。但是,当我尝试运行gprof将gmon.out文件转换为可读的txt文件时,我遇到了“gmon.out太短而不能成为gmon文件”的错误消息。我试着用谷歌搜索这个问题的答案,但无济于事。这里也有人问过同样的问题,但没有给出答案。我在Windows7上为此项目使用Qt4.7.4和QtCreator2.3.0以及mingw编译器。我在.pro文件中设置的标志是:#ProfilerflagsCONFI

c - 正确终止多线程 Windows 控制台应用程序

下面是我从我正在进行的一个更大的项目中拼凑出来的一个简短的概念证明。该项目有一个使用CreateThread创建的工作线程,用于监视目录的更改。我有一些清理代码需要像关闭句柄和释放一些内存一样运行。该应用程序不作为后台进程或服务运行。它通过命令行运行,一直运行到用户关闭命令窗口或按下Ctrl-C。有更好的方法吗?我尝试使用atexit但是当进程被终止时显然没有被调用。请注意,我使用的是C,而不是C++,并且没有使用MFC、AFX或WindowsAPI以外的任何其他API。根据评论,我想这的另一部分是如何在多线程环境中正确终止应用程序?这样可以吗,还是我应该在thread_func中调用

c++ - 返回对类静态数据成员的引用的正确方法是什么? (我正在使用 Qt,以防它有所作为)

我正在尝试从DLL中获取类静态数据成员的地址,并将其保存在主机代码中。但是,当我退出dll-manager中的方法时,我丢失了对成员的指针/引用,该方法打开了所有(Windowstypedef)HINSTANCEs,即使我让它们保持打开状态.我的设置是:一个QtGUI应用程序,其中包含一个从dll加载插件的类。这个dll-manager类不使用Qt的东西,而是到处使用Qdir和Qstrings...dll-manager应该发出一堆LoadLibrary()调用来打开DLL,并为每个调用一个导出函数,该函数返回DLL导出类中静态“信息”结构的地址。例如,DLL类如下所示:BlackNW

windows - 适用于 Windows 的 Profiler QT 应用程序

您好,我正在寻找一个分析器应用程序来分析Windows的QT应用程序。目前,我尝试使用英特尔的ParallelStudio,但我得到了很多误报。有任何链接或文档可以启动吗? 最佳答案 http://doc.qt.io/qtcreator/creator-cache-profiler.htmlQtCreator本身内置了一个分析器,只需查看上面的链接即可了解它们。 关于windows-适用于Windows的ProfilerQT应用程序,我们在StackOverflow上找到一个类似的问题:

使用 Qt 库的 C++ 应用程序在屏幕保护程序启动时停止工作

我有一个使用一些Qt库的C++应用程序。在屏幕保护程序弹出并启动之前,应用程序工作正常。之后,如果我退出屏幕保护程序,应用程序就会崩溃,我必须重新启动它。我已经在Windows7和XP上测试了该应用程序,这两种情况都会发生。我可以在代码中更改什么以防止这种情况发生吗? 最佳答案 LucaCarlon为您提供了很好且相当受欢迎的建议——使用调试器。在你的情况下,你可以从officialdocumentation获得很多关于调试的信息。.当你运行你的程序调试时,你必须重放你的程序崩溃时的情况:你必须手动启动屏幕保护程序,或者加快屏幕保护

windows - 用户级线程内核级线程和纤程

我知道纤程在线程的上下文中运行。它们只是用户级别的。我知道线程可以是用户级或内核级。当您在用户级应用程序中创建线程时,它也是用户级的吗?您能否在您的用户应用程序中创建内核级线程?这些用户级线程也是内核调度的?当您在.NET中调用CreateThread时,内核如何发挥作用?CreateThread函数是否需要通过susbsystemdll到执行层,一直到内核才能创建用户级线程? 最佳答案 在Windows平台上,用户态进程(应用程序)中的线程是用户态线程,内核态进程中的线程是内核态线程。您不能在用户模式进程中创建内核模式线程。在Wi

windows - $$PWD 不再适用于 Qt Creator 2.6

我有一个项目(https://github.com/waddlesplash/qtfastjson),它有一个使用qmake的$$PWD变量的.pri文件。这在所有经过测试的qmake版本中都可以正常工作,但在QtCreator2.6中,文件不会显示在项目树中(但可以正确编译)。这是PRI:QT+=coreINCLUDEPATH+=$$PWDHEADERS+=$$PWD/QtFastJson.h\$$PWD/QtFastJsonObject.hSOURCES+=$$PWD/QtFastJson.cpp\$$PWD/QtFastJsonObject.cpp它包含在.pro中:includ

【多线程基础】 线程安全及解决方案(看这一篇就够了)

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!欢迎志同道合的朋友一起加油喔🦾🦾🦾目录前言1.造成线程不安全的原因有哪些呢?1.1什么是原子性1.2什么是内存可见性1.3共享变量可见性实现的原理 1.4什么是指令重排序2.解决线程安全问题2.1引入关键字synchronized解决线程不安全问题(1) synchronized的使用方法(锁)(2)synchronized的作用 (3)优化后的代码(加锁后)2.2.关于锁/同步监视器的总结(重点掌握):总结1:认识同步监视器(锁) ----- synchronized(同步监视器){}总结2:同步代码块的执行过程(重点理解)总结

windows - 为QT编译opencv时出错

我想在QT中使用opencv,所以我必须用mingw编译它。当我想用CMake2.8.10.2编译它时出现以下错误TheCXXcompileridentificationisGNU4.7.2TheCcompileridentificationisGNU4.7.2CheckforworkingCXXcompiler:C:/Qt/Qt5.0.1/Tools/MinGW/bin/g++.exeCheckforworkingCXXcompiler:C:/Qt/Qt5.0.1/Tools/MinGW/bin/g++.exe--brokenCMakeErroratC:/ProgramFiles(x