【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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:011320
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

架构设计系列三 详细架构设计文档编写

nydia

详细架构设计文档 架构设计文档

成为更好的 Go 开发者的七个主题

baiyutang

Go 语言 9月日更

《鸿蒙理论知识04》HarmonyOS概述之系统定义

孙叫兽

鸿蒙 鸿蒙系统 引航计划

《鸿蒙理论知识05》HarmonyOS概述之下载与安装软件

孙叫兽

鸿蒙 鸿蒙系统 引航计划

学习心得 - 架构训练营 - 第三课

Fm

手撸二叉树之恢复二叉树

HelloWorld杰少

9月日更

疯狂复习半个月,rocketmq原理面试题

Java 程序员 后端

我理想中的任务调度系统

分布式 任务调度 scheduler

系统的可靠性 Reliability

BlockQuant

MySQL 稳定性 可用性 可靠性

【Flutter 专题】44 图解矩阵变换 Transform 类 (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

《鸿蒙理论知识01》HarmonyOS概述之技术特性

孙叫兽

鸿蒙 鸿蒙开发 引航计划

疯狂复习20天卷土从来,2021Java笔试题总结

Java 程序员 后端

【LeetCode】链表中的下一个更大节点Java题解

Albert

算法 LeetCode 9月日更

样式的书写顺序到底能影响渲染性能吗,css中定位到底有几种方式

你好bk

CSS 大前端 性能分析

架构实战营模块三作业 - 外包学生管理系统的架构文档

李焕之

《鸿蒙理论知识02》HarmonyOS开发平台和工具

孙叫兽

鸿蒙 HarmonyOS 鸿蒙系统 引航计划

疯狂复习20天卷土从来,tomcat原理及优化

Java 程序员 后端

疯狂复习半个月,三面蚂蚁金服(交叉面)定级阿里P6

Java 程序员 后端

疯狂复习半个月,全栈系统化的学习路线

Java 程序员 后端

疯狂涨知识,spring全方位深入探索,

Java 程序员 后端

《鸿蒙理论知识03》HarmonyOS概述之系统安全

孙叫兽

鸿蒙 鸿蒙开发 鸿蒙系统 引航计划

外包学生管理系统架构文档

看,有只猪

乘着汽车智能化的浪潮,“汽车人”职业方向的选择(一)

SOA开发者

软件 职业成长 汽车

如何对技术视频转换文章投稿进行二次创作

孙叫兽

技术社区 投稿 引航计划

Apache APISIX 社区周报 | 2021 8.30-9.12

API7.ai 技术团队

Apache 开源 API网关 APISIX 社区周报

28分钟完成一款Python游戏,《客服戏翻总裁牌》

梦想橡皮擦

9月日更

架构实战营 模块八 作业

一雄

作业 架构实战营 模块八

边缘计算如何实现海量IoT数据就地处理

孙叫兽

物联网 边缘计算 引航计划

极客时间【架构实战营】第二期 模块三作业

Geek_91606e

架构实战营

疯狂复习20天卷土从来,Java面试真题解析火爆全网

Java 程序员 后端

再见了,我的散装研发管理平台;再见了,4台ECS!

阿里巴巴云原生

云计算 阿里云

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