在工作线程中使用 std::atomic_flag 时出现问题

2023-12-07

抱歉啰嗦了 - 我尽了最大努力将我的代码示例压缩成一个最小的功能类并且main() method.

我正在尝试使用atomic_flag通知_rx()在我的工作线程中退出时stop()叫做。

我相信问题在于尝试创建我的工作线程,

thread SanityTestThread(&SanityTest::_rx, *this);

这在某种程度上与我的冲突atomic_flag

代码示例(无法编译):

 #include <cstdio>
 #include <chrono>

 #include <unistd.h>
 #include <atomic>
 #include <iostream>
 #include <thread>

 using namespace std;

 class SanityTest
 {

   public:
     SanityTest(){}
     void start();
     void stop();

   private:
     void _rx();
     atomic_flag flag;

 }; // end class SanityTest

void SanityTest::_rx()
{
  while(flag.test_and_set())
  {
    this_thread::sleep_for(chrono::seconds(1));
    cout << "'sup foo" << endl;
  }
} // end _rx

void SanityTest::start()
{
  flag.test_and_set();
  thread SanityTestThread(&SanityTest::_rx, *this);
  SanityTestThread.detach();
} // end start

void SanityTest::stop()
{
  flag.clear();
} // end start

int main(){
  SanityTest s;// = SanityTest();
  s.start();
  this_thread::sleep_for(chrono::seconds(10));
  s.stop();
  return 0;
} // end main

作为记录,我可以通过删除对我的程序的所有引用来编译和运行我的程序atomic_flag并替换我的_rx()使用 for 循环进行循环,如下所示:

void SanityTest::_rx()
{
  for(int i=0; i <=10; ++ i)
  {
    this_thread::sleep_for(chrono::seconds(1));
    cout << "'sup foo" << endl;
  }
} // end _rx

编译器错误:

In file included from ./SanityTest.cpp:1:0:
./SanityTest.hpp:14:7: note: ‘SanityTest::SanityTest(SanityTest&&)’ is implicitly deleted because the default definition would be ill-formed:
 class SanityTest
       ^
./SanityTest.hpp:14:7: error: use of deleted function ‘std::atomic_flag::atomic_flag(const std::atomic_flag&)’
In file included from /usr/include/c++/4.8/atomic:41:0,
                 from ./SanityTest.hpp:8,
                 from ./SanityTest.cpp:1:
/usr/include/c++/4.8/bits/atomic_base.h:275:5: error: declared here
     atomic_flag(const atomic_flag&) = delete;
     ^
In file included from /usr/include/c++/4.8/functional:55:0,
                 from /usr/include/c++/4.8/thread:39,
                 from ./SanityTest.hpp:10,
                 from ./SanityTest.cpp:1:

...

In file included from ./SanityTest.cpp:1:0:
./SanityTest.hpp:14:7: note: ‘SanityTest::SanityTest(SanityTest&&)’ is implicitly deleted because the default definition would be ill-formed:
 class SanityTest
       ^
./SanityTest.hpp:14:7: error: use of deleted function ‘std::atomic_flag::atomic_flag(const std::atomic_flag&)’
In file included from /usr/include/c++/4.8/atomic:41:0,
                 from ./SanityTest.hpp:8,
                 from ./SanityTest.cpp:1:
/usr/include/c++/4.8/bits/atomic_base.h:275:5: error: declared here
     atomic_flag(const atomic_flag&) = delete;
     ^
In file included from /usr/include/c++/4.8/functional:55:0,
                 from /usr/include/c++/4.8/thread:39,
                 from ./SanityTest.hpp:10,
                 from ./SanityTest.cpp:1:

附注这是编译的,g++ -pthread -std=c++0x -o SanityTest ./SanityTest.cpp


只需更换

thread SanityTestThread(&SanityTest::_rx, *this);

with

thread SanityTestThread(&SanityTest::_rx, this);

您可能打算传递一个指向该对象的指针,而不是该对象本身(这将导致该对象被复制并且成员函数指针&SanityTest::_rx在该副本而不是原始对象上调用)。

错误消息的原因本质上是std::atomic_flag没有复制构造函数,因此编译器不会为您生成默认构造函数SanityTest类也可以,但再次强调:无论如何你都不想在这里复制你的 SanityTest 对象。

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

在工作线程中使用 std::atomic_flag 时出现问题 的相关文章

  • 静态构造函数和 BeforeFieldInit?

    如果类型没有静态构造函数 则将执行字段初始值设定项 就在使用该类型之前 或者在某个时间点突发奇想 运行时 为什么这段代码 void Main start Dump Test EchoAndReturn Hello end Dump clas
  • 是否可以使用 http url 作为 DirectShow .Net 中源过滤器的源位置?

    我正在使用 DirectShow Net 库创建一个过滤器图 该过滤器图通过使用 http 地址和 WM Asf Writer 来流式传输视频 然后 在网页上 我可以使用对象元素在 Windows Media Player 对象中呈现视频源
  • C#.Net 邮件将进入垃圾邮件文件夹

    我正在从 ASP net Web 应用程序发送电子邮件 邮件发送成功 没有失败 但大多数都进入了垃圾邮件文件夹 请帮助我克服垃圾邮件过滤器 我的发送邮件代码 public void SendMail string FromAddress s
  • EntityHydrate 任务失败

    我最近安装了 Visual Studio 11 Beta 和 Visual Studio 2010 之后 我无法在 Visual Studio 2010 中构建依赖于 PostSharp 的项目 因此我卸载了 Visual Studio 1
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • Selenium - C# - Webdriver - 无法找到元素

    在 C 中使用 selenium 我试图打开浏览器 导航到 Google 并找到文本搜索字段 我尝试下面的 IWebDriver driver new InternetExplorerDriver C driver Navigate GoT
  • 使用 C# 和 ASP.NET 在电子邮件附件中发送 SQL 报告

    我正在尝试使用 ASP NET 和 C 从 sql reportserver 2008 作为电子邮件附件发送报告 到目前为止我学会了如何获取 PDF 格式的报告 http weblogs asp net srkirkland archive
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • 用于在标头更改时重新编译的简单 C 项目的示例 makefile

    有谁有完整的 makefile 可以执行以下操作 如果 HEADER 文件发生更改 则重建项目 cpp 文件在 makefile 中列出 头文件未在 makefile 中列出 头文件允许与 cpp 文件具有不同的名称 部分cpp文件没有头文
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • C# 根据当前日期传递日期时间值

    我正在尝试根据 sql server 中的两个日期获取记录 Select from table where CreatedDate between StartDate and EndDate我通过了5 12 2010 and 5 12 20
  • 来自嵌入图像的 BitmapSource

    我的目标是在 WPF 窗口上重写 OnRender 方法中绘制图像 someImage png 它是嵌入资源 protected override void OnRender System Windows Media DrawingCont
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • Unity3D - 将 UI 对象移动到屏幕中心,同时保持其父子关系

    我有一个 UI 图像 它的父级是 RectTransform 容器 该容器的父级是 UI 面板 而 UI 面板的父级是 Canvas 我希望能够将此 UI 图像移动到屏幕中心 即画布 同时保留父级层次结构 我的目标是将 UI 图像从中心动画
  • 调用 .ToArray() 时出现 ArgumentException

    我有一个经常被清除的列表 代码完全是这样的 VisitorAgent toPersist List
  • 如何从 Windows Phone 7 模拟器获取数据

    我有一个 WP7 的单元测试框架 它在手机上运行 结果相当难以阅读 因此我将它们写入 XDocument 我的问题是 如何才能将这个 XML 文件从手机上移到我的桌面上 以便我可以实际分析结果 到目前为止 我所做的是将 Debugger B
  • 如何获取带有某个属性注释的所有属性?

    我刚刚从 Roslyn 开始 我想找到所有用属性名称 OneToOne 注释的属性 我启动了 SyntaxVisualizer 并能够获取对该节点的引用 但我想知道是否有更简单的方法来实现此目的 这就是我所拥有的 var prop docu

随机推荐

  • JSON.NET 和 nHibernate 集合的延迟加载

    有人将 JSON NET 与 nHibernate 一起使用吗 我注意到当我尝试加载带有子集合的类时出现错误 我遇到了同样的问题 所以我尝试使用 Liedman的代码 但是GetSerializableMembers 从未被要求提供代理参考
  • 延迟但不禁用 iPhone 自动锁定

    我目前有一个非常简单的应用程序 唯一的交互就是摇动 iPhone 然而 由于 iPhone 没有收到任何触摸事件 屏幕最终会变暗并自动锁定 我想知道是否有办法重置震动时自动锁定超时 我知道要完全禁用自动锁定 我会这样做 UIApplicat
  • 如何使用正则表达式查找特定匹配并将它们放入字符串数组中?

    我有一个 HTML 文件 我正在尝试从中提取数据 我使用的正则表达式是
  • 删除 arrayList 中的元素后出现 InvalidOperationException [重复]

    这个问题在这里已经有答案了 您好 我正在尝试从 arrayList 中删除所有可被 2 整除的数字 问题是 删除一个元素后 我得到一个 InvalidOperationException private ArrayList RemoveDi
  • 如何从文本文件中读取数百万行并快速插入表中

    我已经经历了快速向 SQL Server 插入 200 万行链接并发现我可以通过使用批量插入来做到这一点 所以我试图创建数据表 代码如下 但由于这是一个巨大的文件 超过 300K 行 我得到一个OutOfMemoryEexception在我
  • Y86汇编全局变量

    我正在努力让全局变量为我的 Y86 作业正常工作 不幸的是 我们提供的唯一示例是 IA 32 组件 我过去几个小时一直在寻找 但没有结果 这是我知道的非常基础的知识 但我在 Y86 完全是新手 我 声明 我的变量如下 align 4 x l
  • MySQL-自动递减值

    假设我有一个表 像这样 id 是自动递增的 id col1 col2 1 msg msg 2 lol lol2 3 xxx x 现在 我想删除第 2 行 我得到这样的结果 id col1 col2 1 msg msg 3 xxx x 问题是
  • 如何将某些内容注入到表单中

    从play 2 4 0开始 我们可以使用DI框架 我正在尝试在我的应用程序中使用 DI 我将 jpa 查找器从模型类上的静态方法移至注入控制器的服务层中的方法 我的主要问题是我有一些带有验证方法的表单 并且在我的验证方法中我使用了一些查找器
  • 让 ReSharper 尊重您对代码顺序的偏好

    与我的另一个问题相关 布局 C 类的最佳方式是什么 ReSharper 中有没有办法定义您希望成员的顺序 以便 ReSharper 维护它 From 这个答案 检查下类型成员布局 in Options 在下面C 节点 这并不简单 但可以更改
  • 如何使用 R 创建分组条形图[重复]

    这个问题在这里已经有答案了 我正在尝试使用 R 创建分组条形图 我尝试使用以下代码来创建一个简单的条形图 x c 99 9 104 67 86 53 83 29 127 31 179 86 74 80 100 150 68 18 81 47
  • Delphi 中重载记录的隐式转换作为 const 数组中的参数

    作为 Delphi 7 转换的一部分 我们摆脱了 ShortString 我想让它尽可能轻松 所以我们认为我们可以将 ShortString 更改为一些以相同方式起作用的记录 这是它的声明方式 还有更多内容 但这是基本结构 概述了问题 TS
  • 用ANTLR解析Java代码“需求概念”

    我正在尝试使用 ANTLR 进行程序编译 我使用 Java 编程语言作为目标 问题的核心是开发 Intent Regornizer 来纠正错误并改进源代码 如果源代码不符合 语法 在 ANTLR 的教程和书籍上 我看到如何编译一个简单的代码
  • 订单状态完成时更改购买特定产品的用户角色

    因此 我帮助某人启动了一个网站 当有人购买特定产品时 他们想要折扣产品 我找到了一个解决方案并实施了它 它在网站启动时发挥了作用 并且不再改变客户在购买产品时的角色 我试图获得 Woothemes 的支持 但他们不支持定制 并希望他们购买
  • 将存储过程结果导出到表中

    我有以下存储过程 可以根据某些条件生成 SQL 语句 我希望 SQL 语句也将实际结果返回到表中 CREATE TABLE dbo Rejects Report Year varchar 100 NULL COS Country Code
  • 通过无障碍服务禁用热词检测

    我创建了一个可访问的服务来保存每条 toast 消息 但现在如果我激活我的服务 Google Now 中的热词检测将被禁用 Logcat 显示 W HotwordState suspended 11001001000000 在 Google
  • 平衡可变长度lookbehind中的组[重复]

    这个问题在这里已经有答案了 TL DR 在 NET 的lookbehinds 中使用捕获 特别是平衡组 会更改获得的捕获 尽管它不会产生任何影响 NET 的lookbehind 是什么破坏了预期的行为 我试图找到一个答案这另一个问题 作为玩
  • 可以使用exams2nops中的解决方案模板吗?

    当我尝试使用以下命令生成考试解决方案时exams2nops template solution 我收到以下错误消息 Error in exams2pdf file n n nsamp nsamp dir dir name name form
  • RatingBar 中的步长

    RatingBar 中的步长是多少 这是我在文档中找到的 该评级栏的步长 例如 如果需要半星粒度 则该值为 0 5 我试图在这里找到它 https developer android com reference android widget
  • 如何通过iOS SDK中的iPad Camera Connection Kit读取SD卡内容?

    我想通过iOS SDK中的iPad Camera Connection Kit读取SD卡内容 该怎么做 有代码示例吗 Thanks 没有官方 API 可以做到这一点 在越狱设备上可能是可能的 但不使用官方 sdk
  • 在工作线程中使用 std::atomic_flag 时出现问题

    抱歉啰嗦了 我尽了最大努力将我的代码示例压缩成一个最小的功能类并且main method 我正在尝试使用atomic flag通知 rx 在我的工作线程中退出时stop 叫做 我相信问题在于尝试创建我的工作线程 thread SanityT