Cómo: Enviar un mensaje a intervalos periódicos
En este ejemplo se muestra cómo usar la clase concurrency::timer para enviar un mensaje de manera periódica.
Ejemplo
En el siguiente ejemplo se usa un objeto timer
para notificar el progreso de una operación larga. Este ejemplo vincula el objeto a un timer
objeto concurrency::call. El objeto call
imprime un indicador de progreso en la consola a intervalos periódicos. El método concurrency::timer::start ejecuta el temporizador en un contexto independiente. La función perform_lengthy_operation
llama a la función concurrency::wait en el contexto principal para simular una operación que consume mucho tiempo.
// 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.";
}
Este ejemplo genera la siguiente salida de ejemplo:
Performing a lengthy operation..........done.
Compilar el código
Copie el código de ejemplo y péguelo en un proyecto de Visual Studio o en un archivo denominado report-progress.cpp
y, después, ejecute el siguiente comando en una ventana del símbolo del sistema de Visual Studio.
cl.exe /EHsc report-progress.cpp
Consulte también
Biblioteca de agentes asincrónicos
Bloques de mensajes asincrónicos
Funciones que pasan mensajes