// Copyright 2017 The Fuchsia Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include #include #include #include #include #include #include int main(int argc, char** argv) { async::Loop loop(&kAsyncLoopConfigNoAttachToThread); trace::TraceProvider provider(loop.dispatcher()); puts("Doing work for 30 seconds..."); zx::time start_time = async::Now(loop.dispatcher()); zx::time quit_time = start_time + zx::sec(30); int iteration = 0; async::TaskClosure task([&loop, &task, &iteration, quit_time] { TRACE_DURATION("example", "Doing Work!", "iteration", ++iteration); // Simulate some kind of workload. puts("Doing work!"); zx::nanosleep(zx::deadline_after(zx::msec(500))); // Stop if quitting. zx::time now = async::Now(loop.dispatcher()); if (now > quit_time) { loop.Quit(); return; } // Schedule more work in a little bit. task.PostForTime(loop.dispatcher(), now + zx::msec(200)); }); task.PostForTime(loop.dispatcher(), start_time); loop.Run(); puts("Finished."); return 0; }