写点什么

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

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

关注

评论

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

2021 优质前端资源精选 —— 持续更新,欢迎共建

清秋

大前端 教程 资源 社区 4月日更

百度交易中台之订单系统架构浅析

百度Geek说

云计算 架构 云原生 后端 云服务

Python OpenCV 泛洪填充,取经之旅第 21 天

梦想橡皮擦

Python OpenCV 4月日更

Airtest入门及多设备管理总结

行者AI

自动化测试

webrtc 开启新特性

webrtc developer

在华为云专属月中,寻觅互联网更需要的云味道

脑极体

如何避免成为一个油腻的中年猥琐男?

石云升

读书笔记 中年 28天写作 4月日更

Linux C/C++ 服务器/后端开发/后台开发学习路线

Linux服务器开发

C/C++ Linux服务器开发 Linux后台开发 Linux后端开发

揭开MySQL索引神秘面纱

咔咔

MySQL 索引

Wireshark数据包分析学习笔记Day28

穿过生命散发芬芳

Wireshark 数据包分析 4月日更

霸榜GitHub!银四匠心之作:拼多多/蚂蚁/百度面经分享

Java 编程 程序员 架构 面试

飞桨与宸曜科技完成兼容性认证

百度大脑

认证 飞桨

百度联合研究成果登上《自然》子刊 推动人才管理大数据智能化转型

百度大脑

百度 AI

聪明人的训练(八)

Changing Lin

4月日更

上来就问MySQL事务,瑟瑟发抖...

咔咔

MySQL 事务

解Bug之路-主从切换”未成功”?

无毁的湖光

数据库 主从环境

从零开始写游戏服务器①:前期了解

Integer

c

MVCC:听说有人好奇我的底层实现

咔咔

MySQL MVCC

你对JVM垃圾收集器了解多少?面试官夺命13问谁碰谁不迷糊啊!

北游学Java

Java JVM 垃圾回收

什么是 Jenkins? 运用Jenkins持续集成

码语者

DevOps jenkins

Edge 修改使用的默认搜索引擎

HoneyMoose

MySQL-技术专题-锁的介绍分析

码界西柚

MySQL lock 锁机制

如何保护您的SaaS应用程序?

龙归科技

网络安全 SaaS 远程工作 单点登录

MySQL查询优化必备

咔咔

MySQL 查询优化

一位阿里P8技术大牛的Java面试题总结,在GitHub上仅一天就获赞上万!

Java架构之路

Java 程序员 架构 面试 编程语言

c 语言思维地基搭建(vis2013编译+第一个c语言程序)

-jf.

4月日更

webrtc stream,source,track

webrtc developer

学习笔记

山@支

众盟科技:直播浪潮下,医美行业的私域营销之变

脑极体

我叫小M,立志建立MySQL帝国。

yes

MySQL

来学Python啦,用Python详细讲解温度转换器

Bob

Python Python 游戏编程 4月日更

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