Compartir a través de


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