BT

Weathr, a Comprehensive Demonstration of C++ 14, DirectX, and XAML

by Jonathan Allen on Feb 07, 2014 |

Most technology demonstrations tend to be fairly light weight, showing only a couple key concepts in a fairly trivial application. Weathr is different in that it is a fully functional 3D weather map complete with live service integration and semantic zoom.

The core of Weathr is an ISO C++ using modern coding conventions. Among other things that means no use of the keywords new and delete. Instead nearly everything is handled through the combination of shared, unique, and weak smart pointers.

The user interface is built on a combination of DirectX, for 3D components, and XAML. The later requires the use of C++/CX, the language extension Microsoft created specifically for WinRT based applications.

Another technology being showcased is PPL or Parallel Patterns Library. This allows for the use of asynchronous methods that are chained together using lambda expressions. PPL is used mainly to interact with Bing Maps and World Weather Online via the C++ REST SDK. Memory management for asynchronous can be tricky so Thomas Petchel writes,

Another pattern I’ve discovered occurs when you have a chain of asynchronous tasks and one task creates an object or resource, and another, subsequent, task uses that resource. Although you can often simply create the resource in one task and pass it to its subsequent task, this is not always possible. The issues here are that of lifetime and indirection – whether the object has a C++ or C++/CX type, because we’re working asynchronously, the calling function that sets up the background work will soon exit, and thus any objects allocated on the stack will fall out of scope. To keep objects shared among tasks alive, you must capture smart pointers (typically, a shared_ptr for C++ and C++/CX objects) in all lambdas (or functors) that reference them. By using shared_ptr, you create a level of indirection that enables the object to be allocated (e.g. written to) in one task and used (e.g. read) by a subsequent task.

Ensuring that the async callbacks are being run on the correct thread is another issue. Thomas has this tip for verifying that is occurring,

In Debug builds, record the thread ID of the ASTA thread at startup. In each task continuation, assert that we’re either running on the main (ASTA) thread or a background thread.

In task continuations, specify explicitly whether to run on the current context (e.g. the context that established the task chain, which might be the ASTA thread or MTA thread) or on a background (MTA) context.

Other techniques and technologies explored in this sample application include HTTP request throttling, semantic zoom, gesture recognition, and Windows 8 live tiles.

Weathr is available on CodePlex under the Apache 2 license.

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread
Community comments

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Discuss

Educational Content

General Feedback
Bugs
Advertising
Editorial
InfoQ.com and all content copyright © 2006-2014 C4Media Inc. InfoQ.com hosted at Contegix, the best ISP we've ever worked with.
Privacy policy
BT