为什么 std::packaged_task 无效?

2023-11-26

使用MSVC2012,

以下代码将按预期编译并运行

std::packaged_task< int() > task( []()->int{ std::cout << "hello world" << std::endl; return 0; } );
std::thread t( std::move(task) );
t.join();

而下面的代码将无法编译和运行

std::packaged_task< void() > task( [](){ std::cout << "hello world" << std::endl; } );
std::thread t( std::move(task) );
t.join();

为什么会这样呢?

编辑: 作为解决方法,可以使用 std::promise 在返回 void 的函数上获取 std::future

std::promise<void> promise;
auto future = promise.get_future();
std::thread thread( [](std::promise<void> &p){ std::cout << "hello world" << std::endl; p.set_value(); }, std::move(promise) );
future.wait();

请注意,vs2012 库中的 std::thread 存在一个错误,它强制您将 Promise 作为左值引用传递并将 Promise 移入,如果您按值或通过 r- 传递 Promise,则不会编译。价值参考。据推测,这是因为实现使用了 std::bind() ,它的行为不符合预期。


这是MSVC2012 中的一个错误。 MSVC2012 附带的线程库实现中存在相当多的错误。我在博客文章中发布了部分列表,将其与我的商业 Just::Thread 库进行比较:http://www.justsoftwaresolutions.co.uk/news/just-thread-v1.8.0-released.html

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

为什么 std::packaged_task 无效? 的相关文章

  • UTF8/UTF16 和 Base64 在编码方面有什么区别

    In c 我们可以使用下面的类来进行编码 System Text Encoding UTF8 System Text Encoding UTF16 System Text Encoding ASCII 为什么没有System Text En
  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • 属性对象什么时候创建?

    由于属性实际上只是附加到程序集的元数据 这是否意味着属性对象仅根据请求创建 例如当您调用 GetCustomAttributes 时 或者它们是在创建对象时创建的 或者 前两个的组合 在由于 CLR 的属性扫描而创建对象时创建 从 CLR
  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep

随机推荐

  • Xcode - 目标特定本地化

    我的项目包括多个目标 每个目标用于不同的客户 有些客户需要特定的本地化 我不希望所有客户都获得这种特定的本地化 由于本地化是在项目级别处理的 因此我找不到仅针对特定目标添加本地化的方法 有什么建议如何去做吗 寻找稳定的选项 无需在每次构建之
  • 多次查询同一个表但在不同的列中mysql

    我正在尝试获取更多列来总结两个不同表的结果 SET start res 20150301 SET finish res 20150501 SET finish check 20150801 SET start check 20150301
  • 转储 g++ 中的包含路径

    我正在尝试编写一些构建脚本 并想确定包含的内容是否是系统包含的 所以我想要g 告诉我它正在使用的包含路径 cpp v似乎是明显的最佳选择 但它没有给我 C 路径 所以我尝试 g Xpreprocessor v 这不太正确 g 捕捉到 v因为
  • Flask 应用程序启动后运行代码

    我的目标是在 Flask 应用程序启动后运行任意代码 这是我所得到的 def run from webapp import app app run debug True use reloader False 理想情况下我能够这样做 def
  • 是否有开源线程安全的 C++ 对象池实现? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我需要创建一个套接字连接池 该连接池将服务于多个工作线程 是否有一个线程安全的对象池实现 其功能类似于 Apache Commons Generic
  • 如何使用 JQuery/JS 获取给定 url(外部 url)的网页标题

    我是新手 如果这是一个愚蠢的问题 请原谅 所以我试图使用 JQuery JS 获取 URL 的标题 我不想加载 url 的内容 然后解析其中的标签 让我说得更清楚 我有一组网址 比如说 20 个 我想显示它们的标题 我指的网址不是当前的网址
  • 使 Spring bean 的行为类似于 ExecutorService 的 ThreadLocal 实例

    在我的网络应用程序中 我有一个后台服务 该服务使用包含 Engine 类和ExecutorService配置为使用多个线程并接受 GeneratorTasks Component public class Generator Autowir
  • 在 Entity Framework 4.1 Code First 中手动生成主键的最佳方法是什么

    在 Entity Framework 4 1 Code First 中手动生成主键的最佳方法是什么 我正在对 ASP NET MVC 3 进行编程 并使用存储库模式 我目前使用以下代码按顺序生成密钥 Code First Class Pub
  • 带有自定义比较函数对象的 STL Map

    我想使用 STL 的 Map 容器通过使用二进制数据作为键来查找指针 所以我编写了这个自定义函数对象 struct my cmp bool operator unsigned char const a unsigned char const
  • Boost 的 y=Ax 线性代数解

    boost有吗 其中 A y 和 x 分别是矩阵 稀疏且可以很大 和向量 y 或 x 可能是未知的 我在这里似乎找不到它 http www boost org doc libs 1 39 0 libs numeric ublas doc i
  • 在单元测试中比较 numpy float 数组[重复]

    这个问题在这里已经有答案了 实现比较两个 numpy float 数组的单元测试的最佳方法是什么 我尝试过unittest assertEqual 但对浮点数组不起作用 因为浮点永远不会100 相等 我不能使用assertAlmostEqu
  • printf 和 ++ 运算符[重复]

    这个问题在这里已经有答案了 include
  • 将字符串添加到逐字字符串文字中

    我有一个名为 defaultPath 的路径 我想将其添加到这个逐字字符串文字中 但可以完全获取它周围的引号 C Mavro MavBridge Server MavBridgeService exe service data Data 我
  • 在 ColdFusion 中使用表单数组?

    我不知道如何在 ColdFusion 9 中处理这个问题 我有一个正在提交的表单 POST 其中包含元素复选框 称为 items 当我做一个
  • Nosetest 包括不需要的父目录

    我试图将鼻子测试限制到特定目录 但是在测试运行期间 它包括我要定位的目录的父目录 这样做会引发错误 以下是测试运行输出的关键要素 nose importer DEBUG Add path projects myproject myproje
  • Pandas Dataframe 到 JSON 层次结构

    我已经详尽地审查 尝试了与这一挑战相对应的所有其他问题的实现 但尚未找到解决方案 问题 如何将员工和主管对转换为分层 JSON 结构以用于 D3 可视化 级别数量未知 因此它必须是动态的 我有一个包含五列的数据框 是的 我意识到这不是 Of
  • 具有特定格式的日期到 XMLGregorianCalendar

    我得到一个 Date 对象 我需要将其转换为 XMLGregorianCalendar 特定格式 我尝试了以下方法 String formattedDate sdf format categoryData getBulkCollection
  • k&r 与位操作混淆

    练习是 编写一个函数 setbits x p n y 返回 x 并将从位置 p 开始的 n 位设置为 y 最右边的 n 位 其他位保持不变 我尝试的解决方案是 include
  • 按字典中的值返回键[重复]

    这个问题在这里已经有答案了 我正在尝试返回给定值的字典中的键 在这种情况下 如果 b 在字典中 我希望它返回 b 所在的键 即2 def find key input dict value if value in input dict va
  • 为什么 std::packaged_task 无效?

    使用MSVC2012 以下代码将按预期编译并运行 std packaged task lt int gt task gt int std cout lt lt hello world lt lt std endl return 0 std