草庐IT

QT多线程

全部标签

c# - 从线程启动时模态弹出窗口失败——CSharp WPF

要批量上传多个文件,我有一段CSharpWPF代码,它生成线程以允许并行上传文件。如果上传发生错误,将使用MessageBox弹出一条消息。这很好用。但最近我们决定自定义MessageBox的外观。我发现当使用ShowDialog()打开我们新的自定义WPFMessageBox窗口时会抛出一个错误,提示无法启动GUI。这仅在派生线程中的代码尝试打开自定义消息窗口时发生——当从主线程打开自定义消息框时我没有看到问题。我的临时解决方法是捕获自定义对话框启动时发生的任何错误,并选择调用标准MessageBox.Show()来显示消息。行得通。我不确定为什么可以使用标准MessageBox.S

windows - 在 64 位 Windows 应用程序中获取 TID(线程信息 block )的最快方法?

我有一个计算密集型模块,我在其中添加了堆栈跟踪以便能够找到特定问题。尽管启用此堆栈跟踪时允许应用程序运行得更慢,但它不能运行慢10倍。这就是为什么我不使用DBGHELP.DLL中的StackWalk例程,而是使用帧指针自己遍历堆栈(因此我不使用FramePointerOmission编译器选项)。在大多数情况下,获取调用堆栈工作正常并且非常快,但在某些情况下,我的逻辑会失败,因为其中一个帧指针指向堆栈外的地址(不多,只是一点点)。我知道这可能是某个地方的错误,但为了能够使我的代码更安全,我需要一种方法来检查帧指针是否指向当前线程堆栈中的内存位置。该应用程序为64位,可在Windows下

windows - 如何让Qt Creator的jom.exe在带空格的路径中复制文件?

当我放入我的.pro文件时INSTALLS+=INSTALLINSTALL.files+=install/**INSTALL.path=binjom.exeinstall命令尝试使用绝对路径复制文件copy/yc:\SomeProject\install\QtGui4.dllc:\SomeProject\bin这失败了Thenumberofparametersisinvalid更好的命令是引用路径copy/y"c:\SomeProject\install\QtGui4.dll""c:\SomeProject\bin"哪个成功了。如何让jom.exe引用绝对路径或使用相对路径?

带参数的 C++ 简单线程(无 .net)

我已经在互联网上搜索了一段时间并找到了不同的解决方案,但后来都没有真正起作用或者对我的使用来说太复杂了。直到2年前我才使用C++,所以它可能有点生疏:D我目前正在编写一个将数据发布到URL的程序。它只发布数据。为了发布数据,我使用curl,但它会阻塞主线程,并且当第一个帖子仍在运行时,第二个帖子应该开始。最后大概有5-6个post操作同时运行。现在我想将带有curl的帖子推送到另一个线程中。每个帖子一个线程。线程应该得到一个字符串参数,其中包含要推送的内容。我目前被困在这个问题上。尝试了Windows的WINAPI,但在读取参数时崩溃了。(在我的示例中,第二个线程仍在运行,而主线程结束

windows - 如果线程在临界区内死亡,会发生什么?

场景是这样的。我们有很多线程访问受临界区保护的一段代码,这确保一次只有一个线程可以访问该部分。现在的问题是,如果一个线程死在临界区内会发生什么?应用程序会挂起吗?或者有什么方法可以释放锁? 最佳答案 来自MSDN:Ifathreadterminateswhileithasownershipofacriticalsection,thestateofthecriticalsectionisundefined.来源:http://msdn.microsoft.com/en-us/library/windows/desktop/ms6826

c++ - 俄语(或非拉丁语)文件名加载 Qt Windows

我正在尝试在包含非拉丁字符的Qt/C++软件上加载文件。一个使用俄语文件名的用户报告的问题,我试图用下面的代码快速修复它。示例文件名是(我不会读或写俄语!):Летнийсад.dgrboolQDepthmapView::loadFile(constQString&fileName){m_open_file_name=fileName;m_redraw_all=1;//thisfixestheproblemonaMacOSXbutNOTonWindows!QByteArrayba=fileName.toUtf8();char*file=ba.data();//endoffixif(pD

c++ - 查找可能是由于线程锁定(可能)引起的性能问题

我花了一些时间运行valgrind/callgrind来分析一个使用许多线程进行大量TCP/IP通信的服务器。在提高性能一段时间后,我意识到在这个特定的测试场景中,进程不受CPU限制,所以我看到的性能“改进”没有用。理论上CPU应该很忙。我知道它连接的TCP/IP设备不是限制,因为服务器在两台机器上运行。一个是PC,另一个是带有Arm处理器的嵌入式设备。即使是嵌入式设备也只有大约2%的CPU使用率,但它执行的事务要少得多——大约十分之一。尽管我们试图尽快获取数据,但两个系统最多只能获取大约2%。我的猜测是某个互斥锁被锁定并占用了一个线程。这是一个纯粹的猜测!系统中有几个线程具有公共(p

c++ - 静态构建 Qt,找不到 MinGW

我正在尝试构建Qt的静态版本,因此我可以为我的项目制作一个.exe文件。我找到了this教程,并且正在使用教程作者制作的脚本。当我尝试运行脚本时,我的PowerShell给了我这个>BuildingstaticQtversion5.3.1ERROR:MinGWenvironmentnotfound,noQtprebuiltversion?PressEntertocontinue...:这是不可能的。我知道这一点,因为我已经使用Qt5制作了项目并使用我的MinGW编译器构建了它们。一些附加信息:MinGW位于:C:/Qt/Tools/mingw491_32(/bin/gcc.exe)当我

c++ - 如何在 Qt C++ 应用程序中显示带有大量小部件的可滚动列表作为项目?

目标:在Windows7、10下的Qt5C++应用程序中拥有一个可滚动的自定义小部件列表,数量达数千(可能更多)。问题:将窗口最小化到任务栏并再次恢复后,程序停止响应。虽然它不会崩溃。CPU使用率常量为25%。即使在等待几分钟后,GUI也不会再次响应。此外,通常会消耗大量内存(超过200M),我认为即使对于100kQLabels(每个QLabel大约2k)来说也太多了。Here是针对类似问题的一些建议解决方案,但我认为这些解决方案不适合我的情况。示例:下面的示例说明了这个问题。为了演示,使用了QLabels列表,但它可以是派生自QWidget的任何类。主窗口.h#ifndefMAINW

windows - 线程等待原因

我一直在使用在以下帖子中找到的代码:Howtogetthreadstate(e.g.suspended),memory+CPUusage,starttime,priority,etc我正在检查线程状态,下面的枚举描述了线程“等待”状态的原因-enumKWAIT_REASON{Executive,FreePage,PageIn,PoolAllocation,DelayExecution,Suspended,UserRequest,WrExecutive,WrFreePage,WrPageIn,WrPoolAllocation,WrDelayExecution,WrSuspended,Wr