Permalink
Browse files

Merge pull request #1 from kirkshoop/rxcpp2.0

upgraded to use rxcpp 2.0.0
2 parents c49fd5d + 4c338ca commit 712a54a3f5698b671985369035a537ab30d87907 @d-led committed Jun 25, 2014
Showing with 30 additions and 23 deletions.
  1. +1 −1 ticker/packages.config
  2. +26 −19 ticker/ticker.cpp
  3. +3 −3 ticker/ticker.vcxproj
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="rxcpp" version="1.0.2" targetFramework="Native" />
+ <package id="rxcpp" version="2.0.0" targetFramework="Native" />
</packages>
View
@@ -2,7 +2,7 @@
#include "frequency_meter.h"
#include "active_ticker.h"
-#include <cpprx/rx.hpp>
+#include <rxcpp/rx.hpp>
#include <chrono>
namespace {
@@ -37,36 +37,43 @@ namespace {
void rxcpp_example() {
FrequencyMeter FM;
- auto scheduler = std::make_shared<rxcpp::EventLoopScheduler>();
- auto measure = rxcpp::Interval(std::chrono::milliseconds(250),scheduler);
- auto sleep = [&scheduler](int milliseconds) {
- //rxcpp::from(rxcpp::Interval(std::chrono::milliseconds(milliseconds), scheduler))
- // .take(1)
- // .for_each([](int){});
- //concurrency::wait(milliseconds);
+ std::atomic<long> pending(2);
+
+ // schedule everything on the same event loop thread.
+ auto scheduler = rxcpp::schedulers::make_same_worker(rxcpp::schedulers::make_event_loop().create_worker());
+ auto coordination = rxcpp::identity_one_worker(scheduler);
+ auto measure = rxcpp::observable<>::interval(scheduler.now() + std::chrono::milliseconds(250), std::chrono::milliseconds(250), coordination);
+ auto sleep = [&scheduler](int milliseconds) {
std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds));
};
- auto measure_subscription = rxcpp::from(measure)
+ auto measure_subscription = measure
.subscribe([&FM](int val) {
std::cout << FM.Hz() << std::endl;
});
- auto ticker = rxcpp::Interval(std::chrono::milliseconds(500), scheduler);
- rxcpp::from(ticker)
+ auto ticker = rxcpp::observable<>::interval(scheduler.now() + std::chrono::milliseconds(500), std::chrono::milliseconds(500), coordination);
+ ticker
.take(10)
.subscribe([](int val) {
std::cout << "tick " << val << std::endl;
- });
-
-
- sleep(2000);
- std::cout << "Canceling measurement ..." << std::endl;
- measure_subscription.Dispose(); // cancel measurement
-
- sleep(6000); // wait for ticker to finish
+ },[&](){
+ --pending; // take completed the ticker
+ });
+
+ // schedule the cout on the same worker to keep it from merging with the other cout calls.
+ scheduler.create_worker().schedule(scheduler.now() + std::chrono::seconds(2),
+ [&](const rxcpp::schedulers::schedulable&) {
+ std::cout << "Canceling measurement ..." << std::endl;
+ measure_subscription.unsubscribe(); // cancel measurement
+ --pending; // signal measurement canceled
+ });
+
+ while (pending > 0) {
+ sleep(1000); // wait for ticker and measure to finish
+ }
}
}
@@ -39,7 +39,7 @@
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros">
- <NuGetPackageImportStamp>5fc5653d</NuGetPackageImportStamp>
+ <NuGetPackageImportStamp>a8c8fb0b</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
@@ -95,12 +95,12 @@
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
- <Import Project="..\packages\rxcpp.1.0.2\build\native\rxcpp.targets" Condition="Exists('..\packages\rxcpp.1.0.2\build\native\rxcpp.targets')" />
+ <Import Project="..\packages\rxcpp.2.0.0\build\native\rxcpp.targets" Condition="Exists('..\packages\rxcpp.2.0.0\build\native\rxcpp.targets')" />
</ImportGroup>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
- <Error Condition="!Exists('..\packages\rxcpp.1.0.2\build\native\rxcpp.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\rxcpp.1.0.2\build\native\rxcpp.targets'))" />
+ <Error Condition="!Exists('..\packages\rxcpp.2.0.0\build\native\rxcpp.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\rxcpp.2.0.0\build\native\rxcpp.targets'))" />
</Target>
</Project>

0 comments on commit 712a54a

Please sign in to comment.