50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

关注

评论

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

哈希,茫茫人海,我一眼看到了你

dongge

关于PHP内存溢出的思考

L

php

最佳实践 | Flink Forward 全球会议抢先看!

Apache Flink

大数据 flink AI 流计算 实时计算

Flink SQL 的 9 个示例

Apache Flink

大数据 flink 流计算 实时计算

Flink State 最佳实践

Apache Flink

大数据 flink AI 流计算 实时计算

18个PPT,29个提问解答,都在这儿啦!

Apache Flink

大数据 flink 流计算 实时计算

聊聊技术人如何与甲方客户打交道

MavenTalker

程序员 程序人生 职业规划

转任管理岗位后,还要不要从事编码工作?

MavenTalker

团队管理 程序员 个人成长 职业规划

Java 代码的组织机制

michaelliu

Java

你的文章中为什么会有加粗的文字

小天同学

思考 写作 感悟

作为程序员,有哪些写作平台值得推荐 ?B站也算吧

邓瑞恒Ryan

学习 创业 写作 知识管理 自我提升

原创 | DDD与分层

编程道与术

原创 | OOAD范例:配置类设计

编程道与术

在InfoQ开启写作之旅

张先亮-Hank

人工智能 随笔

LeetCode 120. Triangle

隔壁小王

算法 LeetCode

工厂模式

Wen Wei

设计模式

docker搭建lamp

刘磐石(刘坤鹏)

初文,大浪淘沙

傅丞 Tony

祝贺!两位 Apache Flink PMC 喜提 Apache Member

Apache Flink

大数据 flink 流计算 实时计算

Java 类构造函数的调用顺序

michaelliu

Java

屏幕适配插件:ScreenMatch基本使用和注意事项

Arch

经验可能反而阻碍你的新认知

孙苏勇

思考 读书

Iceberg 在基于 Flink 的流式数据入库场景中的应用

Apache Flink

大数据 flink 流计算 实时计算

Flink 消息聚合处理方案

Apache Flink

大数据 flink 流计算 实时计算

Flink 的经典场景和业务故事有哪些?看看他们就知道了

Apache Flink

大数据 flink 流计算 实时计算

Java 类

michaelliu

Java

技术人员能力养成手记

MavenTalker

个人成长 程序人生 职业规划

什么是全光架构?光纤KVM和分布式IP KVM系统知多少?

DT极客

vue项目中遇到的依赖及其他问题

靖仙

Vue 大前端 Web

我入驻InfoQ平台啦

BlueblueWings

PyFlink 社区扶持计划正式上线!

Apache Flink

大数据 flink 流计算 实时计算

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