写点什么

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

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

关注

评论

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

Android开发:新建后缀为txt的文件并且使用的步骤

三掌柜

8月日更 8月

Java技术开发专题系列之【Guava Collections】实战使用相关Guava不一般的集合框架

洛神灬殇

Java Guava 8月日更 Guava Collections

云与AI真的能互相成就?还是最好各自独立行走?

白洞计划

面试篇:虚拟机栈5连问,一听心里就乐了

阿Q说代码

面试 JVM 8月日更 虚拟机栈

Golang协程之了解管道的缓存能力

Regan Yue

协程 Go 语言 8月日更

ansible 循环

耳东@Erdong

ansible 8月日更 ansible 循环

在线BMI身体质量指数计算器

入门小站

工具

模块一作业2(毕设构架设计)

Laintime

ShardingSphere源码解析 初步准备

Java 源码 ShardingSphere

IDEA2020.1构建Spring5.2.x源码

4ye

Java spring 源码 后端 8月日更

Yarn资源调度框架

Geek_qsftko

YARN

架构训练营第一模块作业(1)微信业务构架图学习

Laintime

架构实战营

几种常用设计模式的简单示例

编程三昧

JavaScript 大前端 设计模式 8月日更

使用Redisson优雅关闭订单

码农参上

redission 8月日更

zookeeper集群怎么搞?

卢卡多多

zookeeper 8月日更

CSS的设计模式(二)BEM与SMACSS

Augus

CSS 8月日更

模块五作业

seawolflin

架构训练营

手撸二叉树之合并二叉树

HelloWorld杰少

8月日更 数据结构算法

高尚小区

escray

生活记录 8月日更

Vue进阶(五十三):vue-cli 脚手架 webpack.prod.conf.js 配置文件详解

No Silver Bullet

Vue 8月日更

【LeetCode】压缩字符串Java题解

Albert

算法 LeetCode 8月日更

Linux之uniq命令

入门小站

Linux

如此爱国,必然自毁长城

箭上有毒

8月日更

Android EditText输入框实现下拉且保存最近5个历史记录

Andy阿辉

android Android 小菜鸟 编程思想 8月日更

磁场消灭癌细胞,是一种新的抗癌方案吗?

脑极体

Android.mk

Changing Lin

8月日更

vue入门:vuex概括与使用

小鲍侃java

8月日更

【六顶思考帽】蓝色思考帽

LeifChen

8月日更 创新思维 蓝色思考帽

模块一课后作业

穿裤子的云

架构实战营

四种常见的 POST 提交数据方式

一个大红包

8月日更

扫码出入登记小程序

清风

小程序

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