Visual Studio 2015中的协同程序–更新1

在VisualStudio 2015的预览中,我们介绍了C++的Coroutines,请参见 博客文章 介绍一下 在这里 . 你也可以看看CPPCon 2015,讨论C++的协同程序 在这里 .

null

我们继续研究可恢复函数,这里是VS 2015 update 1中协同程序状态的简要更新。请参阅Visual Studio 2015 update 1文章 在这里 .

一些限制消失了:

  • 现在支持ARM、x86和amd64
  • 现在您可以在协同程序中使用异常
  • 现在您可以在一个协同程序中使用return语句,然后再等待或屈服
  • 现在您可以将协同程序与/ZI一起使用(编辑并继续调试)

一些人留下来:

  • 仍然与/sdl和/RTCx标志不兼容(应在VS Update 2中修复)
  • 对于协程中未使用或未初始化的变量,我们将给出错误的/W4警告

跟踪最新协同方案的设计变更(P0057):

  • 初始u suspend/最终u suspend/屈服u值必须返回awaitable
  • 分配定制是通过重载promise的新操作符而不是提供分配器对象来完成的
  • 通过操作员等待进行等待定制
  • 收益现在是一种表达,而不是一种陈述
  • (详见P0054)

VS Update 2中的预期内容

  • 消除限制
  • 添加特定于协同程序的优化
  • 等待转换自定义点(见P0054)
  • 添加Kona 2015关键词:cou Wait、cou yield和cou return。

工具书类

奖金

使用operator await定义如何在直接进入Win32线程池API的std::chrono::duration上等待。

#包括

#包括 <未来>

#包括

汽车 操作人员 等待(std::chrono:: 系统瞬变电磁钟 :: 期间 期间 ) {

等待者 {

静止的 无效 回拨 计时器回调( PTP回调实例 , 无效 * 上下文 , PTPU定时器 ) {

标准::实验:: 协同程序句柄 <>::发件人地址( 上下文 ) () ;

}

PTPU定时器 定时器= 空PTR ;

标准::时间:: 系统时钟 :: 期间 持续时间;

公众的 :

明确的 等待者(std::chrono:: 系统时钟 :: 期间 d ):持续时间( d ) {}

布尔 等待u就绪() 常数 { 返回 duration.count()<=0;}

布尔 等待挂起(标准::实验:: 协同程序句柄 <> 简历u cb ) {

国际64 相对计数=-持续时间。计数();

计时器=CreateThreadpoolTimer(TimerCallback, 简历u cb .to地址(), 空PTR );

SetThreadpoolTimer(计时器( P文件时间 )&相对计数,0,0);

返回 计时器!=0;

}

无效 等待恢复(){}

~等待者(){ 如果 (计时器)CloseThreadpoolTimer(计时器);}

};

返回 等待者 { 期间 };

}

使用 命名空间 标准;

使用 命名空间 标准::计时;

未来 < 无效 >测试(){

库特 << 此线程::getu id() << “:正在睡觉…” ;

等待 1ms;

库特 << 此线程::getu id() << “:醒来” ;

}

内景 主(){

test().get();

库特 << 此线程::getu id() << “:返回main”” ;

}

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享