如何告诉 QThread 等待工作完成,然后完成?

2023-12-13

我有一个使用一个工作线程的简单应用程序。 这个工作线程启动并初始化DownloadManager,它负责从网络下载文件。 在我的主应用程序类中,我在 DownloadManager 完成之前发出的线程上有 finish() 信号。

我的问题是如何让工作线程等待 DownloadManager 完成其工作。

这是示例代码:

 class Main
 {
     m_DownloadWorker = new DownloadWorker(this);
     QObject::connect(pm_hotosDownloadWorker, SIGNAL(finished()), this, SLOT(DownloadWorkerFinished()));
     m_DownloadWorker->Execute();
     // do i need to do here something so the thread will wait ?

     .....


    void Main::DownloadWorkerFinished()
    {
        Log("DownloadWorkerFinished");
    }
 };


 class DownloadWorker : public QThread
 {
     void DownloadWorker::Execute()
     {

         // do i need to do here somthing so the thread will wait ? 
        start();
     }

     void DownloadWorker::run()
     {
         // do i need to do here somthing so the thread will wait ?
        DownloadManager* pDownloadManager = new DownloadManager(this);
        pDownloadManager->download();


     }
 };

 class DownloadManager: public QObject
 {
     // downloading stuff using Qt networkmanager 

     .....
     .....
 }

如果您在异步操作完成时发出信号,则始终可以使用 QEventLoop 将异步操作“转变”为与当前线程同步。它仍然是异步的,但线程将“等待”它完成。

QNetworkAccessManager nam;
QEventLoop loop;
QNetworkReply *reply = nam.get(request); 
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();

所以基本上你把它放在你想要同步执行网络请求的 DownloadManager 类中。exec()一旦循环就会返回quit插槽已被调用。

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

如何告诉 QThread 等待工作完成,然后完成? 的相关文章

  • 如何在 C++ 中的文件末尾添加数据?

    我已按照网上的说明进行操作 此代码应该将输入添加到文件 数据库 的末尾 但当我检查时 数据会覆盖现有数据 请帮忙 这是我的代码 int main string name string address string handphone cou
  • 如何读取扩展文件属性/文件元数据

    因此 我按照教程使用 ASP net core 将文件 上传 到本地路径 这是代码 public IActionResult About IList
  • 使用Physics.Raycast 和Physics2D.Raycast 检测对象上的点击

    我的场景中有一个空的游戏对象 带有 2D 组件盒碰撞器 我将脚本附加到该游戏对象 void OnMouseDown Debug Log clic 但是当我点击我的游戏对象时 没有任何效果 你有什么想法 如何检测我的盒子碰撞器上的点击 使用光
  • Unix网络编程澄清

    我正在翻阅这本经典书籍Unix网络编程 https rads stackoverflow com amzn click com 0139498761 当我偶然发现这个程序时 第 6 8 节 第 179 180 页 include unp h
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 启动时出现 OData v4 错误:找不到段“Whatever”的资源

    我正在构建新的 v4 服务 一切进展顺利 直到我为新模型 实体添加了新控制器 并在启动站点进行测试运行时收到此错误 控制器似乎编码正确 就像其他控制器一样 控制器 CustomersOData 中的操作 GetFeed 上的路径模板 Cus
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • HttpWebRequest 在第二次调用时超时

    为什么以下代码在第二次 及后续 运行时超时 代码挂在 using Stream objStream request GetResponse GetResponseStream 然后引发 WebException 表示请求已超时 我已经尝试过
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • Log4j,将 Web 应用程序配置为使用相对路径

    我有一个 java web 应用程序 必须部署在 Win 或 Linux 计算机上 我现在想添加 log4j 进行日志记录 并且想使用日志文件的相对路径 因为我不想在每次部署时更改文件路径 该容器很可能是 Tomcat 但也不一定 这样做的
  • 指针和字符串文字

    我多次看到以下言论 char ch Hello cout lt
  • 使用哪个 Android 控件?

    我正在迈出 Android 编程的第一步 我的应用程序是在数据库中创建条目 对于此任务 我创建了一个新的活动 一切都很好 但我不太喜欢它的样子 Currently the emulator shows this 我想要一些类似于 新联系人
  • 是扩展“语法”还是扩展“运算符”?

    我听说 两者都称为 传播 syntax 和 传播operator 后者更受欢迎 相关网址MDN 文档表明它最初被称为传播operator但后来改为扩展语法 并且MDN 的运营商列表没有提到它 谷歌似乎建议了这个词operator更受欢迎和接
  • 如何在 Jlist 中添加两列?

    我找到了双JList示例代码 但我需要在一个Jlist 如何在一个表格中添加两列Jlist 我尝试使用ListCellRenderer 但我未能向模型添加元素 Here s代码显示在带有图像的网页中 你的意思是这样的吗 我首先要通读一下如何
  • Elastic Search 忽略映射并且长字段显示为字符串

    我正在向 elasticsearch 添加一个架构 并在该架构中尝试添加一些先前已作为字符串处理的长字段 我创建了一个新索引并重新处理了数据 但在新索引中这些字段仍然显示为字符串 来自索引端点的映射的相关部分 image features
  • 如何从后台弹出片段

    我有一个活动 A 它调用片段 Bf 它又调用片段 Cf 我希望在调用 Cf 时将 Bf 放置在后台堆栈中 以便用户可以导航回它 但是 如果在 Cf 中按下特定按钮 我希望 Bf 从返回堆栈中删除 这可能吗 我看到有一个 popBackSta
  • WCF:数据契约正在转换为消息契约

    我的 WCF 服务导出单个操作 标记有捕获所有操作和回复操作 以便它代表服务的公共入口点 ServiceContract public interface IService OperationContract Action ReplyAct
  • 扩展克隆表行功能 - 更改行 ID

    我有这个小提琴 http jsfiddle net radi8 EwQUW 33 请注意 初始表的定义是 table class reference width 100 border 1 align left thead tr th wid
  • 用户编写的函数内的 purrr + dplyr NSE 问题

    经过大量的试验和错误并咨询以前的答案 例如如何检测是否是裸变量或字符串我想我已经自己完成了大部分需要做的事情 但我渴望了解在将我的 解决方案 投入生产之前我是否做出了一些错误的假设或愚蠢地处理问题 考虑以下数据 library dplyr
  • lapply / R 中的承诺

    我不确定 R 中的承诺在做什么 如果一个人跑 a lapply seq len 2 function n function n b lapply seq len 2 function n n 我们可以看到 a 1 2 b 1 1 据我所知
  • 如何安全输出包含 HTML 标签的内容?

    我有一个博客系统 用户必须将内容输入到html文本区域 包括html标签 例如 p 这存储在数据库中 如果此输入随后使用 php 回显到网页 我如何转义输出以防止 XSS 但保留 html 标记的含义 以便博客文章的格式正确 如果我使用ht
  • 碰撞检测:圆形物体

    我正在开发一个 Java 游戏 但开发语言并不重要 其中包括球或冰球等圆形物体 现在正在处理碰撞 我使用计时器 因此在每一帧中我都会检查是否发生碰撞 这是一个代表对象右上角部分的图表 对象的中心由点 0 0 表示 半径为10px 单位为像素
  • 如何在 C# 中验证是否已连接到 MySQL 数据库?

    我在 C 中添加了 MySQL 服务器的参考 我以为我的代码是对的 我知道连接值适合测试 这是我的错误 建立与 SQL Server 的连接时发生网络相关或特定于实例的错误 找不到服务器或无法访问服务器 请验证实例名称是否正确以及 SQL
  • 如何在 php 中使用 fetchAll?

    我正在使用此语句来获取数据库中列中的元素 result stmt gt fetchAll PDO FETCH COLUMN 0 但我在尝试运行它时收到此错误 调用未定义的方法mysqli stmt fetchAll 我需要在 php 文件中
  • 覆盖 Yii2 Swiftmailer 收件人

    我需要覆盖 Swiftmailer 的每个实例的收件人电子邮件send 在我的 Yii2 应用程序中运行 这是为了负载测试的目的 是否有捷径可寻 或者至少有一种无需编辑 Swiftmailer 的供应商文件即可做到这一点的方法 如果这只是为
  • 在 jFreeCharts 中垂直显示堆叠条形图的列键

    我正在使用 jfreecharts 开发 javaEE 应用程序 我使用 stackedBarChart 成功显示了数据 但列键 Y 轴标签 未完全显示 因为它们太大 我怎样才能垂直显示它们 谢谢你的建议 您可以使用setCategoryL
  • javascript/jquery 倒计时器与 JSfiddle 示例?

    我正在构建一些东西 其中之一是倒计时器 倒计时永远不会超过一个小时 所以我需要做的就是倒计时分钟和秒 我已经部分工作了 但问题出在前导零上 我让它在几秒钟内工作 但不能在几分钟内工作 看看我的例子http jsfiddle net cgwe
  • 为什么我在这里得到垃圾(不需要的)输出?

    每当我编写以下代码时 我都会在某些在线编译器中得到垃圾 意外 输出 但是如果我使用代码块 则会得到满意的输出 所以我的问题是为什么我会得到这种类型的输出 例如 如果我输入 5 7 5 10 20 40 20 然后我得到 22 1 在代码块中
  • 如何告诉 QThread 等待工作完成,然后完成?

    我有一个使用一个工作线程的简单应用程序 这个工作线程启动并初始化DownloadManager 它负责从网络下载文件 在我的主应用程序类中 我在 DownloadManager 完成之前发出的线程上有 finish 信号 我的问题是如何让工