为什么 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 无效? 的相关文章

  • -ffast-math 可以安全地用于典型项目吗?

    在回答我建议的问题时 ffast math 有评论指出这是危险的 我个人的感觉是 在科学计算之外 是可以的 我还假设严肃的金融应用程序使用定点而不是浮点 当然 如果你想在你的项目中使用它 最终的答案是在你的项目上测试它 看看它有多大影响 但
  • 全局变量不好

    好吧 读完这篇文章和一些示例后 我仍然不清楚全局变量的含义 那么你的类中的私有变量是全局的吗 http www c2 com cgi wiki GlobalVariablesAreBad http www c2 com cgi wiki G
  • 地图类容器的专用功能

    我想要专门为矢量和地图之类的容器设计一个函数模板 对于向量 我可以像下面那样做 但我不知道如何才能有一个专门版本的函数 该函数仅用于像地图这样的容器 include
  • 如何获取枚举数作为常量?

    From 枚举中定义的项目总数 https stackoverflow com questions 856154 total number of items defined in an enum 我发现我可以使用以下方法获取枚举数 Enum
  • MVVM:来自 FileOpenPicker 的图像绑定源

    我将 OnActivated 添加到 app xaml cs 中 它可以正常工作 protected async override void OnActivated IActivatedEventArgs args var continua
  • 如何配置 Ninject 来注入 NodaTime IClock

    在我的 NinjectConfigurator 中我有 container Bind
  • 以编程方式更新 Wifi 网络

    我正在尝试创建一个程序 当某个 wifi 网络在范围内时 该程序会连接到该网络 即使已经连接到另一个 wifi 也是如此 我在用着简单Wifi https github com DigiExam simplewifi 基本上效果很好 除了在
  • 如何在单例类和未命名类之间进行选择?

    我会使用这样的单例 Singleton single Singleton instance single gt do it 我会使用这样的未命名类 single do it 我觉得单例模式除了具有可读的错误消息之外 与未命名的类相比没有任何
  • 在编译输出中添加程序集绑定 (app.config)

    如果我编译应用程序 则会在输出中自动添加程序集绑定 具体的程序集绑定不在app config在 Visual Studio 中但在创建的应用程序配置中 有什么办法可以检查为什么会自动添加程序集绑定吗 选项AutoGenerateBindin
  • 仅使用一个 #include 表达式一次包含多个头文件?

    是否有任何表达式可以使语法一次包含多个标头 而无需为每个新文件编写 include 表达式 例如 include
  • 向客户端发送状态码 500 时页面未呈现

    我有一个页面 通用处理程序 我想在该页面上向客户端返回状态代码 500 以指示出现问题 我这样做 Response StatusCode 500 Response StatusDescription Internal Server Erro
  • 用 std::generate_n 填充 std::map

    我想填写一个std map using std generate n但无法让它发挥作用 我尝试过的是这样的事情 unsigned number of pairs 5 std map
  • 如何检查日期时间是否发生在今天?

    有没有比下面的代码更好的 net 方法来检查 今天 是否发生了 DateTime if newsStory WhenAdded Day DateTime Now Day newsStory WhenAdded Month DateTime
  • C 中的 2 个字符要短

    我有2个字符 Char 128和查尔2 如何将这些字符转为 Short640 in C 我试过了 unsigned short getShort unsigned char array int offset short returnVal
  • C# 中的 mshtml.HTMLDocumentClass

    在 C 中 我设法从 InternetExplorer 对象获取整个 HTMLDocumentClass 导航到某个 URL 然而 在 Visual Studio 2008 的调试模式下 该特定 URL 的 HTMLDocumentClas
  • 使用属性和性能

    我正在优化我的代码 我注意到使用属性 甚至自动属性 对执行时间有深远的影响 请参阅下面的示例 Test public void GetterVsField PropertyTest propertyTest new PropertyTest
  • 将“C# 友好类型”名称转换为实际类型:“int” => typeof(int)

    我想得到一个System Type给定一个string指定 原始 类型C 友好名称 基本上与 C 编译器读取 C 源代码时的方式相同 我觉得描述我所追求的最好方式是单元测试的形式 我希望存在一种通用技术 可以使以下所有断言通过 而不是尝试对
  • 在for循环中声明和初始化变量

    可以简单写一下吗 for int i 0 代替 int i for i 0 在 C 或 C 中 并且会变量i只能在循环内部访问 它在 C 中有效 它在 C 的原始版本中是不合法的 但在 C99 中被采用为 C 的一部分 当时一些 C 功能被
  • Web 和 winforms 的 .Net 身份验证

    我有一个为客户端构建的 ASP NET Web 应用程序 它使用默认的 ASP NET 表单身份验证 他们现在请求一个能够 与 Web 应用程序一起工作的桌面 WinForms 应用程序 我已经创建了 Web 服务来访问他们想要从 Web
  • 在派生类中访问基类变量

    class Program static void Main string args baseClass obj new baseClass obj intF 5 obj intS 4 child obj1 new child Consol

随机推荐

  • 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