如何根据用户请求安全地停止正在运行的线程?

2024-01-10

我所处的场景是,当线程根据 GUI 上的用户操作运行时,我必须终止该线程。我在 Windows 上使用 Qt 4.5.2。一种方法如下:

class MyThread : public QThread
{
    QMutex mutex;
    bool stop;

    public:
        MyThread() : stop(false) {}

        void requestStop()
        {
            QMutexLocker(&mutex);
            stop = true;
        }

        void run()
        {
            while(counter1--)
            {
                QMutexLocker(&mutex);
                if (stop) return;

                while(counter2--)
                {
                }
            }
        }
};

请注意,上面的代码是最少的。运行函数最多可能需要 20 秒才能完成,因此我想避免锁定和解锁mutex循环中的变量。有没有比这个方法更快的其他方法。

提前致谢。


它不能直接满足您的需求,但是您不能将互斥体的范围限制得更紧吗?

while(counter1--) {
    {
      QMutexLocker(&mutex);
      if (stop) return;
    } // End locking scope : we won't read it anymore until next time
    while(counter2--)
...   
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据用户请求安全地停止正在运行的线程? 的相关文章

  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • extern 声明和函数定义都在同一文件中

    我只是浏览了一下gcc源文件 在gcc c 我发现了类似的东西 extern int main int char int main int argc char argv 现在我的疑问是extern是告诉编译器特定的函数不在这个文件中 但可以
  • 处理右值时的 insert 与 emplace

    std string myString std unordered set
  • cpp.react库的C++源代码中奇怪的“->* []”表达式

    这是我在文档中找到的 C 片段cpp react 库 https github com schlangster cpp react implicit parallelism auto in D MakeVar 0 auto op1 in g
  • 语音识别编程问题入门

    所以 你们可能都看过 钢铁侠 其中托尼与一个名为贾维斯的人工智能系统进行交互 演示剪辑here http www youtube com watch v Go8zsh1Ev6Y 抱歉 这是广告 我非常熟悉 C C 和 Visual Basi
  • 如何在 C# Designer.cs 代码中使用常量字符串?

    如何在 designer cs 文件中引用常量字符串 一个直接的答案是在我的 cs 文件中创建一个私有字符串变量 然后编辑 Designer cs 文件以使用此变量 而不是对字符串进行硬编码 但设计者不喜欢这样抛出错误 我明白为什么这行不通
  • 什么是空终止字符串?

    它与什么不同标准 字符串 http www cplusplus com reference string string 字符串 实际上只是一个数组chars 空终止字符串是指其中包含空字符的字符串 0 标记字符串的结尾 不一定是数组的结尾
  • 获取没有显式特征的整数模板参数的有符号/无符号变体

    我希望定义一个模板类 其模板参数始终是整数类型 该类将包含两个成员 其中之一是类型T 另一个作为类型的无符号变体T 即如果T int then T Unsigned unsigned int 我的第一直觉是这样做 template
  • 是否使用 C# 数据集? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 C 中的数据集概念有点困惑 编码 ASP NET 站点 但这并不重要 在我的阅读中 我了解到它们 本质上 用作我的应用程序和我的
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 在 .NET MAUI 中实现 TouchTracking

    我一直致力于将我们的应用程序从 Xamarin Forms 迁移到 NET MAUI 我们的应用程序几乎没有绘图功能 用户可以用手指进行绘图 我们用了TouchTrackingXamarin Forms 中的 nuget 包 但与 NET
  • 已发布的 .Net Core 应用程序警告安装 .Net Core,但它已安装

    我制作了一个 WPF 和控制台应用程序 供某人在我无法访问的私人服务器上使用 我使用 Visual Studio 2019 的内置 发布向导 来创建依赖于框架的单文件应用程序 当该人打开 WPF 应用程序时 他们会看到标准警告 他们单击 是
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • 将二变量 std::function 转换为单变量 std::function

    我有一个函数 它获取两个值 x 和 y 并返回结果 std function lt double double double gt mult double x double y return x y 现在我想得到一个常量 y 的单变量函数
  • 如何最好地以编程方式将 `__attribute__ ((unused))` 应用于这些自动生成的对象?

    In my makefile我有以下目标 它将文本 HTML 资源 编译 为unsigned char数组使用xxd i http linuxcommand org man pages xxd1 html 我将结果包装在匿名命名空间和标头保
  • 模板类的模板构造函数的 C++ 显式模板特化

    我有一个像这样的课程 template
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • WPF DataGrid / ListView 绑定到数组 mvvm

    我们假设你有 N 个整数的数组 表示行数的整数值 在模型中 该整数绑定到视图中的 ComboBox Q1 如何将数组 或数组的各个项目 绑定到 DataGrid 或 ListView 控件 以便 当您更改 ComboBox 值时 只有那么多
  • 了解 Lambda 表达式和委托 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经尝试解决这个问题很长一段时间了 阅读在线博客和文章 但到目前为止还没有成功 什么是代表 什么是 Lambda 表达式 两者的优点

随机推荐

  • ionic 2 错误 cordova 不可用

    我正在尝试在新的 ionic 2 项目 最新的 ionic2 版本 中使用 cordova GooglePlus 插件 但我总是遇到有关 cordova 的错误 该插件已正确安装并显示在插件文件夹中 我尝试过的一种方法是 import Go
  • jQuery Fancybox 无法识别元素

    a href https xenogamers org attachment php attachmentid 3655 d 1350682390 img class thumbnail border 0 alt Click image f
  • 将列表的控制台输出转换为真正的 R 列表

    有人刚刚发布了一些控制台输出作为示例 这种情况经常发生 我有将打印输出转换为向量和数据帧的策略 我想知道是否有人有一种优雅的方法将其解析为真正的 R 列表 test lt 1 1 1 0000 1 9643 4 5957 2 1 1 000
  • 定义自定义管道运算符时出现不明确的警告

    在我的过程中我需要执行很多dplyr inner joins 我想我可以为它定义一个自定义管道运算符 如所解释的here https stackoverflow com questions 47475923 custom pipe to s
  • 如何在 iOS 中使用 CIFilter?

    苹果表示 CIFilter 可在 iOS 中使用 但是 在我的 Mac 上 我找不到可链接的 CoreImage 框架 过滤器 可选的核心图像过滤器 提供转换的对象 property 保留 CIFilter 过滤器 即 当我尝试执行类似操作
  • 删除 Plotly 中条形图之间的间隙

    我正在尝试使用 Plotly 在 R 中创建 Marimekko 图表 本质上 这只是一个堆叠的 可变宽度的条形图 两个条形直接相邻 目前 我的尝试如下 创建它的代码在这里 bar test lt plot ly type bar gt l
  • 避免在泛型方法中强制转换为 Nothing

    scala gt def foo U t Any t asInstanceOf U foo U t Any U scala gt val s String foo hi scala gt val n foo hi java lang Cla
  • Spark数据帧过滤器

    val df sc parallelize Seq 1 Emailab 2 Phoneab 3 Faxab 4 Mail 5 Other 6 MSL12 7 MSL 8 HCP 9 HCP12 toDF c1 c2 c1 c2 1 Emai
  • 运算符“+”不能应用于“字符串”和“方法组”类型的操作数[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在检查是否存在包含以下代码的目录 while Directory Exists currentDirectory year T
  • 使用 PL/SQL 创建 Excel 文件 (.xlsx)

    关于我之前的问题返回显式游标的SQL语句 https stackoverflow com questions 41281665 return the sql statement of an explicit cursor 我能够生成 Exc
  • Vue.js v-if 用于属性

    假设我有这个代码 table my attr value complex component Jade 我想渲染它my attr基于传递到组件中的属性 由于 v if 适用于整个元素 我不能做类似的事情 table my attr valu
  • jQuery - 使全局变量可用于多个插件

    我正在为网站创建一组 jQuery 插件 所有这些插件都有共同的功能 即调用 getJSON 这些调用中传递的 URL 根据开发 QA 和生产环境而有所不同 我想将 URL 存储在一个中心位置 以便可以轻松更改 URL 应该存储在哪里 我不
  • 根据 URL / 锚点更改 Facebook 元数据

    我在输入问题时发现对此进行了小型交流将 URL 哈希添加到 Facebook 和 Twitter 共享卡的元数据中 https stackoverflow com questions 16014439 adding a url hash i
  • 是否可以在 Mirror API 中注册顶级意图?

    例如 顶级操作 是 Google 拍照 等 是否可以使用 Mirror API 来注册自定义顶级事件 好吧 格拉斯 咬碎我吧 我的第二个问题是是否可以获取用户语音 使用 OK Glass Google 示例 用户说出 Google 接受并执
  • Postgresql中按窗口函数结果过滤

    好吧 最初这只是我们和朋友开的一个玩笑 但后来变成了有趣的技术问题 我有以下内容stuff table CREATE TABLE stuff id serial PRIMARY KEY volume integer NOT NULL DEF
  • 无法访问 kubernetes + rancher 中的 KubeAPI 端口

    我有以下配置来启动 rke 当我向上rke 我得到了错误 rancher cluster yml nodes address 192 168 88 246 internal address 172 17 0 1 user dockeruse
  • 如何在android应用程序中使用现有的.so文件[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找应该在 android 平台中将 doc docx 转换为 pdf 的库 我得到了 PdFTron android sdk 因为
  • 如何在 Java Flight Recorder 采样中包含 IO 绑定方法?

    我在启动时通过为测试中的 Java 程序指定以下 CLI 选项来启动 JFR Xmx24g XX UnlockCommercialFeatures XX FlightRecorder XX FlightRecorderOptions def
  • Asp.Net 何时删除过期的缓存项?

    当您添加一个项目到System Web Caching Cache具有绝对到期日期 如下面的示例所示 Asp Net 的行为如何 可以 只需将项目标记为过期 然后执行CacheItemRemovedCallback下次访问尝试时 从缓存中删
  • 如何根据用户请求安全地停止正在运行的线程?

    我所处的场景是 当线程根据 GUI 上的用户操作运行时 我必须终止该线程 我在 Windows 上使用 Qt 4 5 2 一种方法如下 class MyThread public QThread QMutex mutex bool stop