草庐IT

QT多线程

全部标签

windows - 相对文件路径差异 : debug mode and release mode of Qt Creator

QFilefile("test.txt");if(file.open(QIODevice::ReadOnly)){qDebug()我正在使用:Qt4.8.6和MSVC2010QtCreator3.1.1Windows7(32位)从上面的代码来看,如果.pro文件没有改动,对应的build目录对于Debug模式:D:\...\build-Main-MSVC2010-Debug而Debug模式的.exe会位于D:\...\build-Main-MSVC2010-Debug\debug对于Release模式:D:\...\build-Main-MSVC2010-Release而Release

c++ - Qt QextSerialPort 静态库

如何为Windows平台制作QextSerialPort静态库以与Qt4.8.5一起使用我不明白如何修改.pro或.pri文件来执行此操作。(.prf文件不断重新生成)。所以我尝试修改生成的.vcproj文件以进行静态构建,并删除了一些定义,但我仍然收到如下警告:qextserialport.lib(qextserialport.obj):warningLNK4006:"public:__thiscallQextSerialPort::QextSerialPort(classQStringconst&,enumQextSerialPort::QueryMode,classQObject

c++ - 我可以从不同的线程调用 socket send() 吗?

如果我有一个名为s的socket,我可以在不同的线程中执行此操作吗:线程1:send(s,"HellofromThread1");线程2:send(s,"HellofromThread2");是否保证这两个字符串会一个接一个地放入发送缓冲区(我不关心哪个先放),或者它们是否有可能混在一起?注意:也许这个问题的标题应该是:“Issocketsend()threadsafe”(但我不太确定线程安全是什么意思). 最佳答案 答案是否定的。一般来说,send()不保证数据是整block发送的。您始终需要检查send()返回的值,以了解实际发

c++ - 无法在qt之外运行应用程序

这个问题在这里已经有了答案:HowtocompileQt5underWindowsorLinux,32or64bit,staticordynamiconVisualStudioorg++(1个回答)DeployingQt5ApponWindows(2个答案)关闭7年前。我什至无法在QT之外运行HelloWorld.exe。我通过QTCreator5.4.2对其进行编码。从QTcreator构建和运行工作正常。但是当我试图在QT之外运行生成的可执行文件时,我的意思是直接在桌面上运行,它一直给我错误,比如缺少库。通过网络搜索我知道我需要做一些静态构建。请帮助我。请清楚地描述步骤0到N,以免

我可以在特定地址创建一个堆栈的线程吗?

我正在做一些实验,想知道是否可以在我提供的特定地址创建一个线程堆栈,或者至少让线程堆栈只在我可以指定的某个(巨大的)虚拟内存区域中产生.我对此感兴趣的原因是我想在某个时候将整个堆栈复制到远程进程并且需要指针保持完整,并且线程堆栈不会发生冲突。这可能不是最好/最安全的方法,我知道,但这只是一个小小的爱好项目。如果您知道如何在Linux上执行此操作,我也对此很感兴趣。 最佳答案 只是编译评论所说的内容。Forwindows,theanswerisno对于Unix(posix),答案是pthread_attr_setstack.(另见上面

windows - 用于 I/O 的最新 Windows 线程池 API 用法

我不明白最新的Windows线程池API的一部分。我需要这方面的帮助。从文档中,将其用于I/O(在我的情况下,用于SOCKET)的方法可以总结如下:调用CreateThreadpoolIo。调用StartThreadpoolIo.您可以在那里找到此警告:YoumustcallthisfunctionbeforeinitiatingeachasynchronousI/OoperationonthefilehandleboundtotheI/Ocompletionobject.FailuretodosowillcausethethreadpooltoignoreanI/Ooperation

windows - 防病毒软件阻止 Qt 应用程序和 "unknown developer"消息

我的Qt应用程序的一些用户报告了一些关于防病毒(Windows)和“未知开发者”(OSX)的问题。在某些情况下,在Windows上,防病毒软件会阻止应用程序或显示应用程序可能存在危险的消息。我如何才能使我的Qt应用程序对防病毒软件“值得信赖”?在OSX上,当用户尝试运行应用程序时,系统会显示一条关于“未知开发者”的消息。我该怎么做才能不显示此消息?不幸的是,我无法提供有关这些问题的更多详细信息,因为我无法在我的机器上复制这些问题。我只是根据用户反馈的问题来问的。 最佳答案 在macOS中-您需要使用开发人员证书对应用进行签名。您需要

windows - 关闭事件对象是否会导致等待该对象的线程唤醒?

假设我有一个Windows事件对象,例如从调用CreateEvent。线程A在WaitForSingleObject(event_handle)中被阻塞。线程B调用CloseHandle(event_handle)。问题一:线程A发生了什么?问题2:如果线程A在WaitForMultipleObjects中被阻塞,会有什么不同吗?WaitForMultipleObjects返回什么? 最佳答案 根据实验,如果句柄关闭,WaitForSingleObject似乎不会唤醒,即线程A一直在等待。我没有检查过,但我假设WaitForMult

windows - 在 QT 程序中全局强制 QFileDialog::DontUseNativeDialog

为了避免卡住在https://bugreports.qt.io/browse/QTBUG-59184在UbuntuUnity上(以及Windows上的一些网络问题),我想在对QFileDialog静态函数的所有调用中强制使用QFileDialog::DontUseNativeDialog。一些调用来自第三方库,因此在代码中单独更改它们并不容易,因此我更愿意为将应用的QApplication(或其他方式)设置一些标志所有这些对QFileDialog的调用。 最佳答案 QCoreApplication::setAttribute(Qt:

windows - 如何在 COM 组件中创建线程?

我有一个在COM服务中实例化的COM组件(此.exe正在运行)。我有十个客户。每个客户端都从ROT获取接口(interface)(IXyz)指针并同时调用方法IXyz::abc()。根据我的跟踪,我看到IXyz::abc()同时被调用了10次,但是在10个不同的线程中。谁在创建这10个线程? 最佳答案 如果您仔细想想,COM的行为是有道理的。代码在服务进程内部执行。如果将类标记为在单线程单元中运行,则一次只有一个线程执行。并发调用堆积在消息qeueu中,一次执行一个。如果指定了多线程单元,则代码可以并发执行。为了在运行过程中完成此操