大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

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

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

关注

评论

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

【译】Rust 开发者的2019

WasmEdge

程序员 rust

微服务架构深度解析与最佳实践 - 第五部分

kimmking

微服务 最佳实践 深度解析 高可用

一个运营经理人的工作两周年总结

霍太稳@极客邦科技

高效工作 身心健康 项目管理 自我管理

最近看了两本书:The Rules of Life 和 Make Big Happen

霍太稳@极客邦科技

创业 团队管理 自我管理

黄金思维圈,养成透过现象看本质的能力

非著名程序员

读书笔记 程序员 程序人生 提升认知

越是困难,越是要做有分析判断能力的人

霍太稳@极客邦科技

创业 团队管理 个人成长

两边夹的应用

孙苏勇

算法 积水问题 两边夹

浅谈数据中台

数据社

大数据 数据中台 数据仓库

2019 年

贾献华

2020 2019 总结 日历 计划

阿里笔记之数据模型

迹_Jason

大数据

微服务架构深度解析与最佳实践 - 第三部分

kimmking

微服务 最佳实践 深度解析 高可用

微服务架构深度解析与最佳实践(全篇汇总)

kimmking

微服务 最佳实践 深度解析 高可用

微服务架构深度解析与最佳实践-第一部分

kimmking

微服务 最佳实践 深度解析 高可用

一个独立开发者,他是如何做到月入 20 万的?

非著名程序员

程序员 独立开发者 副业赚钱 开发者 程序人生

平均响应1000ms到200ms,PHP和Go那家强?

拖地先生

php 架构 性能优化 后台开发 运维

一文讲清楚 MySQL 事务隔离级别和实现原理,开发人员必备知识点

古时的风筝

MySQL 数据库 事务隔离级别 mysql事务 数据库事务

申请鲲鹏920测试机试水+编译nginx

草宝虫

nginx 鲲鹏920 centos7 armv8

两边夹的应用二

孙苏勇

算法 两边夹 重排序 函数式接口 Lambda

求稳不得

孙苏勇

职业 发展 职场

归去来兮:递归

曲镇

算法

小程序的当下和未来可能 | GMTC.2019深圳站演讲文稿

崔红保

小程序 uni-app

聊聊:Python

谢烟客

Python 人工智能 编程

微服务架构深度解析与最佳实践 - 第四部分

kimmking

微服务 最佳实践 深度解析 高可用

数据分析师应该了解的数据湖

数据社

大数据 数据仓库 数据湖 数据分析

微服务架构深度解析与最佳实践 - 第七部分

kimmking

微服务 最佳实践 深度解析 高可用

程序员职业生涯的八点感想

池建强

程序员 职业

微服务架构深度解析与最佳实践-第二部分

kimmking

微服务 最佳实践 深度解析 高可用

你不是迷茫,只是缺乏目标

Steve

学习 身心健康 方法 自我管理

亚马逊云 AWS LightSail 搭建高性能 LNMP 环境并安全部署 Wordpress

SnowHide雪诺海德

nginx Wordpress 部署 SELinux 安全上下文配置 亚马逊云 AWS Lightsail 安全

凡事必先骑上虎背

Steve

学习 态度 方法论

微服务架构深度解析与最佳实践 - 第六部分

kimmking

微服务 最佳实践 深度解析 高可用

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