AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

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

关注

评论

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

leetcode 650. 2 Keys Keyboard 只有两个键的键盘(中等)

okokabcd

LeetCode 动态规划 数据结构与算法

毕业总结

库尔斯

架构实战营

linux硬盘挂载教程

乌龟哥哥

7月月更

【愚公系列】2022年07月 Go教学课程 001-Go语言前提简介

愚公搬代码

7月月更

L3立法试水,为自动驾驶产业带来什么?

脑极体

Web侧防御指南

穿过生命散发芬芳

7月月更 Web防护

电商系统微服务架构

极客土豆

如何优雅的写 Controller 层代码?

程序知音

Java 编程 程序员 后端

性能测试如何创造业务价值

老张

性能测试 技术与业务

【算法刷题日记之本手篇】组队竞赛与删除公共字符

未见花闻

7月月更

Python XML-RPC实现简单的远程调用过程

宇宙之一粟

Python 7月月更

旧的Spring Security OAuth已停止维护,全面拥抱最新解决方案

程序知音

Java spring 程序员 微服务 后端

疫情封控65天,我的居家办公心得分享 | 社区征文

程序员海军

远程办公 远程开发 初夏征文

大话云原生之负载均衡篇-小饭馆客流量变大了

字母哥哥

Docker 负载均衡 云原生

为什么网站打开速度慢?

源字节1号

网站开发

Vuex(一)

小恺

7月月更

ajax

Jason199

ajax 7月月更

图解网络:什么是虚拟路由器冗余协议 VRRP?

wljslmz

网络技术 路由协议 7月月更 VRRP

Web2.0的巨头纷纷布局VC,Tiger DAO VC或成抵达Web3捷径

股市老人

Mall电商实战项目全面升级!支持最新版SpringBoot,干掉循环依赖

程序知音

Java spring 编程 程序员 后端

Web2.0的巨头纷纷布局VC,Tiger DAO VC或成抵达Web3捷径

鳄鱼视界

煮饺子与docker、kubernetes之间的关系

字母哥哥

Docker 容器化 #Kubernetes#

服务可见可观测性

阿泽🧸

微服务 7月月更

「Docker 那些事儿」容器很难理解?带你从头到尾捋一遍

Albert Edison

7月月更

秒杀系统设计

库尔斯

架构实战营

scrcpy这款软件解决了和同事分享手机屏幕的问题| 社区征文

尼露

线程的启动与优先级

zarmnosaj

7月月更

瞧瞧人家用SpringBoot写的后端API接口,那叫一个优雅

程序知音

Java spring 编程 程序员 后端

linux-riscv-5.17 纯净源码

贾献华

7月月更

DotNet圈里一个优秀的ORM——FreeSql

为自己带盐

7月月更 freesql dotnetcore

疫情当头,作为Leader如何进行团队的管理?| 社区征文

码界西柚

团队管理 远程办公 7月日更 初夏征文

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