Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This example shows how to use the Concurrency::timer class to send a message at a regular interval.
Example
The following example uses a timer object to report progress during a lengthy operation. This example links the timer object to a Concurrency::call object. The call object prints a progress indicator to the console at a regular interval. The Concurrency::timer::start method runs the timer on a separate context. The perform_lengthy_operation function calls the Concurrency::wait function on the main context to simulate a time-consuming operation.
// report-progress.cpp
// compile with: /EHsc
#include <agents.h>
#include <iostream>
using namespace Concurrency;
using namespace std;
// Simulates a lengthy operation.
void perform_lengthy_operation()
{
// Yield the current context for one second.
wait(1000);
}
int wmain()
{
// Create a call object that prints a single character to the console.
call<wchar_t> report_progress([](wchar_t c) {
wcout << c;
});
// Create a timer object that sends the dot character to the
// call object every 100 milliseconds.
timer<wchar_t> progress_timer(100, L'.', &report_progress, true);
wcout << L"Performing a lengthy operation";
// Start the timer on a separate context.
progress_timer.start();
// Perform a lengthy operation on the main context.
perform_lengthy_operation();
// Stop the timer and print a message.
progress_timer.stop();
wcout << L"done.";
}
This example produces the following sample output:
Performing a lengthy operation..........done.
Compiling the Code
Copy the example code and paste it in a Visual Studio project, or paste it in a file that is named report-progress.cpp and then run the following command in a Visual Studio 2010 Command Prompt window.
cl.exe /EHsc report-progress.cpp