写点什么

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

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

关注

评论

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

什么是低代码?低代码开发对企业有哪些特殊作用和优势?

优秀

低代码开发

Go- 结构体

HelloBug

Go 语言 结构体

Confluence 数据中心版本接近生命周期了

HoneyMoose

开源应用中心|这款漂亮的国产开源论坛系统,放着不用太可惜!

开源软件

直播回顾 | 做一个有格局的工程师

鉴释

创业 工程师 CEO

“吾道一以贯之”:华为Petal One的新格局

脑极体

09. 深度学习携手大数据引领第三AI热潮--何为深度学习?

Databri_AI

人工智能

物联网实时监管 区块链云端留痕 公章何时何地何人用过一清二楚

CECBC

德勤:区块链成为现实,采用逐渐增多

CECBC

PhxSQL设计与实现

OpenIM

🚄【Redis干货领域】从底层彻底吃透RDB原理(基础篇)

洛神灬殇

redis RDB 快照 rdb分析 9月日更

网络攻防学习笔记 Day125

穿过生命散发芬芳

9月日更 互联网安全

Promise.all() 原理解析及使用指南

devpoint

Promise 异步任务 9月日更

区块链落地进行时:专利猛增,构建工业互联网信任价值

CECBC

【网络安全】漏洞复现有多少种方式?

网络安全学海

php 网络安全 信息安全 WEB安全 安全漏洞

未来10年,C++5个非常有前景的就业方向

hanaper

RedHat 8 如何检查端口是否联通

HoneyMoose

OpenSSL国密爆出8.1分高危漏洞CVE-2021-3711

腾讯安全云鼎实验室

漏洞分析 openssl

Python代码阅读(第23篇):将变量名称转换为短横线连接式命名风格

Felix

Python 编程 Code Programing 阅读代码

Java + opencv 实现性别识别

张音乐

Java OpenCV 9月日更 性别识别

人能靠自驱来学习吗?

石云升

学习 9月日更

谈 C++17 里的 Singleton 模式

hedzr

c++ 算法 设计模式 Singleton

【得物技术】直播服务监控告警归因实践

得物技术

稳定性 服务 直播 告警 问题排查

LeetCode刷题704-简单-二分查找

ベ布小禅

9月日更

如何大规模交付高质量、高一致性的RESTful API及配套产物

刘宇

API OpenAPI REST API

打一把游戏看一场病:当VR成为“数字新药”

脑极体

一文读懂 OceanBase 数据库的启动恢复代码解析

OceanBase 数据库

数据库 分布式事务 oceanbase OceanBase 开源

【VueRouter 源码学习】第一篇 - 环境搭建与路由模式介绍

Brave

源码 vue-router 9月日更

Linux之ssh-add命令

入门小站

Linux

在线JSON转Go Struct工具

入门小站

工具

IntelliJ IDEA 中如何将 POM 中的版本号快速提出为属性

HoneyMoose

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