HOWTO · C++
Agregar retardo cronometrado en C++
Este tutorial le brindará una breve guía sobre cómo agregar un retraso cronometrado en su programa C++.
En esta página
Este tutorial le brindará una breve guía sobre cómo agregar un retraso cronometrado en su programa C++.
Esto se puede hacer de muchas maneras utilizando algunas funciones que nos proporcionan las bibliotecas de C++. Discutiremos algunas funciones junto con su demostración de trabajo.
Cualquier proceso, tarea o subproceso en un programa de computadora puede suspenderse o volverse inactivo. Esto significa que la ejecución del proceso se puede poner en espera durante el tiempo que esté en suspensión.
Cuando el intervalo de suspensión expira o una señal o interrupción hace que la ejecución se reanude, la ejecución se reanudará. Existen diferentes métodos para este fin:
- la llamada al sistema
sleep() - el método
usleep() - el método
sleep_for() - el método
sleep_until()
Utilice la llamada al sistema sleep() para agregar un retraso cronometrado en C++
Una llamada al sistema sleep puede poner un programa (tarea, proceso o subproceso) en suspensión. El parámetro time en una típica llamada al sistema sleep indica cuánto tiempo necesita el programa para dormir o permanecer inactivo.
El lenguaje C++ no tiene una función sleep. Esta funcionalidad la proporcionan archivos específicos del sistema operativo, como unistd.h para Linux y Windows.h para Windows.
Para utilizar la función sleep() en un sistema operativo Linux o UNIX, debemos incluir el archivo de cabecera "unistd.h" en nuestro programa.
Prototipo de función
unsigned sleep(unsigned seconds);
Toma una cantidad de parámetros de segundos por los cuales necesitamos suspender la ejecución y devuelve 0 si regresa con éxito a la ejecución. Si el sueño se interrumpe en el medio, se devuelve el tiempo total menos el tiempo de interrupción.
Ejemplo:
#ifdef _WIN32
#include <Windows.h>
#else
#include <unistd.h>
#endif
#include <cstdlib>
#include <iostream>
using namespace std;
int main() {
cout << "Before sleep call " << endl;
cout.flush();
sleep(9);
cout << "After sleep call" << endl;
return 0;
}
Producción :
Before sleep call
After sleep call
En la salida, hemos impreso dos declaraciones. Después de imprimir el primero, el compilador espera 9 segundos y luego se imprime el otro. Los lectores deben ejecutar el programa para observar este retraso.
Use la función usleep() para agregar un retraso cronometrado en C++
Otra función en el encabezado unistd.h es usleep(), que le permite pausar la ejecución de un programa durante un tiempo determinado. El funcionamiento es idéntico a la función sleep() descrita anteriormente.
La función usleep() suspende la ejecución del subproceso que llama durante usegundos microsegundos o hasta que se envía la señal que interrumpe la ejecución.
Prototipo de función
int usleep(useconds_t useconds);
Esta función toma como parámetro el número de microsegundos por los que se necesita pausar la ejecución y devuelve 0 si se reanuda con éxito y -1 si se produce algún fallo.
Ejemplo:
#include <unistd.h>
#include <cstdlib>
#include <iostream>
using namespace std;
int main() {
cout << "Hello ";
cout.flush();
usleep(10000);
cout << "World";
cout << endl;
return 0;
}
Producción :
Before Usleep Call
After Usleep call
Como puede ver en el fragmento de código anterior, proporcionamos una espera de 10000 microsegundos entre la impresión de dos declaraciones.
En C++ 11, contamos con funciones específicas para hacer que los subprocesos estén inactivos. Hay dos métodos para este propósito, sleep_for y sleep_until.
Analicemos estos dos métodos:
Use la función sleep_for() para agregar un retraso cronometrado en C++
La función sleep_for () se define en el encabezado <thread>. La función sleep_for () suspende la ejecución del hilo actual por la duración especificada en la duración del sueño.
Debido a actividades de programación o retrasos en la contención de recursos, esta función puede bloquearse por más tiempo que el período proporcionado.
Prototipo de función
template <class Rep, class Period>
void sleep_for(const std::chrono::duration<Rep, Period>& sleep_duration);
Ejemplo:
#include <chrono>
#include <iostream>
#include <thread>
using namespace std;
int main() {
cout << "Hello I'm here before waiting" << endl;
this_thread::sleep_for(chrono::milliseconds(10000));
cout << "I Waited for 10000 ms\n";
}
Producción :
Hello I'm here before waiting
I Waited for 10000 ms
En el fragmento de código anterior, hemos hecho que el subproceso principal duerma durante 10000 milisegundos, lo que significa que el subproceso actual bloqueará 10000 milisegundos y luego reanudará su ejecución.
Use la función sleep_until() para agregar un retraso cronometrado en C++
El encabezado <thread> define esta función. El método sleep_until () detiene la ejecución de un subproceso hasta que haya pasado el tiempo de suspensión.
Debido a actividades de programación o retrasos en la contención de recursos, esta función, como las demás, puede bloquearse durante más tiempo que el especificado.
Prototipo de función
template <class Clock, class Duration>
void sleep_until(const std::chrono::time_point<Clock, Duration>& sleep_time);
Toma como parámetro el tiempo durante el cual se debe bloquear el hilo y no devuelve nada.
Ejemplo:
#include <chrono>
#include <iostream>
#include <thread>
using namespace std;
int main() {
cout << "Hello I'm here before waiting" << endl;
std::this_thread::sleep_until(std::chrono::system_clock::now()
std::chrono::seconds(3));
cout << "I Waited for 3 seconds\n";
}
Producción :
Hello I'm here before waiting
I Waited for 2 seconds