QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

Weathr:综合演示 C++ 14、DirectX 和 XAML

  • 2014-02-18
  • 本文字数:964 字

    阅读完需:约 3 分钟

大多数技术演示都是相当轻量级的,只是用很小的应用演示一些关键概念。Weathr 却并非如此,它是一个全功能的 3D 气象图,同时提供了在线服务集成和语义缩放(semantic zoom)。

Weathr 的核心是使用现代编码约定的 ISO C++。这意味着不使用 new 和 delete 关键字。相反,几乎所有东西都是通过组合使用 shared、unique 和 weak 智能指针来处理的。

用户界面基于 DirectX 和 XAML 构建,其中前者用于 3D 组件。后者需要使用 C++/CX,这是微软专门为基于 WinRT 的应用创建的语言扩展。

演示的另一项技术是 PPL( Parallel Patterns Library )。该库支持使用通过 lambda 表达式链接在一起的异步方法。PPL 主要用于通过 C++ REST SDK 和 Bing Maps 及 World Weather Online 交互。异步条件下的内存管理有点棘手,所以 Thomas Petchel 写道:

当有一组链接到一起的异步任务,而且一个任务负责创建一个对象或资源,而随后的另一个任务使用该资源时,我发现的另一个模式就出现了。尽管通常可以简单地在一个任务中创建该资源,然后将其传递给随后的任务,但是这并不是总能行得通的。这是生命周期与间接性的问题——不管对象是 C++ 还是 C++/CX 类型的,因为我们异步工作,负责准备背景工作的调用函数很快就会退出,因此任何分配在该函数的栈上的对象都会走出其作用域。为使对象在活动的任务间共享,必须获取所有 lambda 表达式或仿函数(functor)中引用这些对象的智能指针(通常是 C++ 和 C++/CX 对象的 shared_ptr)。通过使用 shared_ptr,我们创建了一个间接层,支持对象在一个任务中分配(例如,写入一个任务中),然后在随后的任务中使用(例如读取)。

确保 async 回调在正确的线程上运行是另一个问题。对于验证线程,Thomas 有如下提示:

在调试构建版本中,在启动时记录 ASTA 线程的线程 ID。在每个任务延续(task continuation)中,确认我们是在主线程(ASTA)还是后台线程上运行。

在任务延续中,显式地指定是要在当前上下文(例如,建立任务链的上下文,它可能是 ASTA 线程或 MTA 线程)上运行,还是要在后台(MTA)上下文上运行。

该示例应用中也探索了其他技巧与技术,包括 HTTP 请求节流、语义缩放、手势识别和Windows 8 动态磁贴。

Weathr 基于 Apache 2 许可发布,可以在 CodePlex 上获取。

查看英文原文: Weathr, a Comprehensive Demonstration of C++ 14, DirectX, and XAML

2014-02-18 19:011558
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 139.4 次阅读, 收获喜欢 35 次。

关注

评论

发布
暂无评论
发现更多内容

phabricator + gitlab 强制code review

阿呆

gitlab Code Review phabricator

【得物技术】零拷贝

得物技术

io 网络 零拷贝 流程 传输

终于学完了阿里P8大牛推荐的527页Java性能优化实践文档

Java 编程 架构 面试

毕业1年,凭借一份 “漫画” 杀进大厂?他是怎么做到的?原理篇+框架篇

Java架构师迁哥

作为程序员,遇到问题时你的解决手段是什么?

阿杰

程序员

高阶的产品经理是什么样的?

石云升

产品经理 职场经验 7月日更

极光开发者周刊【No.0716】

极光JIGUANG

hdfs中抽象为block块的好处

五分钟学大数据

hdfs 7月日更

【通证经济】价值、应用、市场,被掩盖的区块链宝藏!!

CECBC

Lamda(拉姆达)表达式演化过程

叫练

jdk8 JDK1.8新特性

Magician 1.1.16 is released, the handler adopts annotation configuration

Magician网络编程包

Java nio

便捷赔付,自在出行!亚马逊云科技助力车险业务因“云”而变

亚马逊云科技 (Amazon Web Services)

模块二作业

VE

架构实战营

百分点数据科学实验室:智慧应急安全生产智能决策方案建设实践

百分点科技技术团队

昇腾AI的三级跳

脑极体

阿里“保姆级”教程,这份SpringBoot应用到实战手册,满满的精华

Java架构师迁哥

Python OpenCV 基于图像边缘提取的轮廓发现函数

梦想橡皮擦

7月日更

Web UI自动化的设计和实践

GrowingIO技术专栏

Python 实战(五)| 字符串

一个优秀的废人

B 站崩了:事情不大,影响不小

Java架构师迁哥

5分钟速读之Rust权威指南(四十二)高级函数

wzx

rust

第四周作业-知识星球加入星球的用例文档

小夏

产品经理训练营 邱岳

博睿数据亮相2021中国互联网大会,践行数字政府新路径

博睿数据

博睿数据 数据链DNA

架构实战营模块二作业

Clarke

架构实战营

我佛了!花重金求来的并发编程笔记,颠覆了我以往“正确“的认知

Java 编程 程序员

🐧【Linux技术专题系列】「必备基础知识」一起探索(用户、用户组与文件权限)

码界西柚

Linux 操作系统 linux 文件权限控制 7月日更

亚马逊云科技携手 Vodafone Business 向欧洲企业推广边缘计算

亚马逊云科技 (Amazon Web Services)

Magician 1.1.16 发布,handler采用注解配置

Magician网络编程包

Java 网络编程 nio

百分点大数据技术团队:ClickHouse国家级项目性能优化实践

百分点科技技术团队

北鲲云超算:以HPC解决方案助力生命科学领域研究发展

北鲲云

如何通过代码审计从三层内网各种漏洞拿到域控?

网络安全学海

黑客 网络安全 信息安全 安全漏洞 渗透测试·

Weathr:综合演示C++ 14、DirectX和XAML_语言 & 开发_Jonathan Allen_InfoQ精选文章