¿Cómo se obtiene el sueño en c?++?

¿Cómo se obtiene el sueño en c?++?
Mientras se ejecuta un hilo, es posible que el hilo se detenga durante algún tiempo y luego continúe funcionando nuevamente. Esto se llama dormir. El programador tiene que decidir si un hilo tiene que dormir o no. Si el hilo tiene que dormir, el programador tiene que decidir cuándo y dónde (en qué posición de la secuencia de declaraciones) el hilo tiene que dormir.

La siguiente pregunta es: "¿Qué es un hilo??"Un hilo es como un subprograma en un programa C ++. Un programa C ++ simple normal es como un hilo. Es la función principal () la que es efectivamente un hilo. La función Main () es una función de nivel superior. Un programa C ++ puede tener otras funciones de nivel superior. Cada una de las otras funciones de nivel superior se puede convertir formalmente en un hilo. La función C ++ Main () se comporta como un hilo sin ninguna conversión formal (en un hilo).

El espacio de nombres estándar de C ++ tiene la clase estática, this_thread. Esta clase estática tiene las funciones de los miembros,

void sleep_for (rel_time)

y

void sleep_until (abs_time)

Estas funciones precedidas por "this_thread ::" se pueden usar en cualquier hilo, incluida la función main (). La función main () no necesita ninguna conversión en un hilo. Cada una de estas funciones se puede usar para dormir un hilo. Cada una de estas funciones toma una discusión. Sin embargo, los argumentos son de diferentes tipos.

sleep_for () usa el tiempo relativo como argumento, mientras que sleep_until () usa el tiempo absoluto como argumento. Rel_time, que significa tiempo relativo, es la duración de que el hilo duerma. Por otro lado, con ABS_Time, que significa absoluto_time, para la función sleep_until (), ABS_Time es el punto de tiempo cuando el hilo se despertará del sueño. En este caso, el hilo comienza a dormir cuando se ejecuta la función sleep_until ().
Time_point en C ++ es el punto de tiempo después de la época Unix. La época de Unix es el 1 de enero de 1970.

Este artículo explica cómo hacer que un hilo duerma. Comienza con un resumen de cómo codificar un hilo. También explica cómo hacer un programa simple en C ++, Sleep.

Contenido del artículo

  • Resumen de codificación de hilos
  • Objetos de tiempo relativos y absolutos
  • Durmiendo por la hora relativa
  • Durmiendo por tiempo absoluto
  • Conclusión

Resumen de codificación de hilos

El siguiente programa tiene dos hilos: uno de los cuales es la función principal (), y el otro es, thr:

#incluir
#incluir
usando el espacio de nombres STD;
vacío funct ()
cout <<"Code A goes here." <cout <<"Code B goes here." <
int main ()

hilo thr (funct);
thr.unirse();
regresar 0;

La salida es:

El código A va aquí.
El código B va aquí.

El programa comienza con la inclusión de la biblioteca iostream. A continuación, está la inclusión de la biblioteca de subprocesos, que es imprescindible. La siguiente línea después es una declaración. Esta declaración garantiza que cualquier nombre utilizado debajo en el programa sea del espacio de nombres estándar a menos que se indique lo contrario. Luego está la definición de la función de nivel superior, funct ().

Después de esa definición es la función principal (). La función principal () también es una definición de función. La primera declaración en la función main () instancia el hilo, thr. El argumento a THR es el nombre de la función de nivel superior, funct (). En esta instancia, se llama a la función, funct (). El hilo efectivo es la función de nivel superior. Observe que la función principal (), como un hilo, no tiene ninguna declaración formal para un hilo, pero la función, funct () tiene.

La siguiente declaración en la función main () es la declaración Join (). Esta declaración debe estar en el cuerpo de función del hilo de llamadas. Si esta declaración está ausente, el hilo main () puede ejecutarse hasta su finalización sin que el hilo se complete en sí mismo. De hecho, si esta declaración está ausente, el compilador G ++ no compilará el programa y emitirá un mensaje de error.

Objetos de tiempo relativos y absolutos
Duración, intervalo

La función sleep_for () toma un objeto de duración como argumento. Este es el tiempo relativo. Con la inclusión de la biblioteca Chrono, los objetos de tiempo relativos se pueden crear de la siguiente manera:

crono :: horas hs (3);
crono :: minutos ms (3);
crono :: segundos ss (3);
Chrono :: MilliseConds MSS (3);
Chrono :: Microsegunds Miss (3);

Aquí, hay 3 horas con el nombre, HS; 3 minutos con el nombre, MS; 3 segundos con el nombre, SS; 3 milisegundos con el nombre, MSS; y 3 microsegundos con el nombre, señorita.

1 milisegundo = 1/1000 segundos. 1 microsegundo = 1/1000000 segundos.

Punto de tiempo

Time_point en C ++, es el punto de tiempo después de la época Unix. La época de Unix es el 1 de enero de 1970. Este es el tiempo absoluto. La función, sleep_until () usa el objeto de tiempo absoluto como argumento. Con la inclusión de la biblioteca Chrono, los objetos de tiempo absolutos, después de ahora, se pueden crear de la siguiente manera:

Chrono :: System_Clock :: Time_Point tp = Chrono :: System_clock :: Now () + Chrono :: Hours (3);
Chrono :: System_clock :: Time_Point tp = Chrono :: System_clock :: Now () + Chrono :: Minutes (3);
Chrono :: System_Clock :: Time_Point tp = Chrono :: System_clock :: Now () + Chrono :: Seconds (3);
Chrono :: System_Clock :: Time_Point tp = Chrono :: System_clock :: Now () + Chrono :: MilliseConds (3);
crono :: system_clock :: time_point tp = chrono :: system_clock :: ahora () + crono :: microsegundos (3);

El nombre de cada uno de estos objetos es TP.

Durmiendo por la hora relativa
Función principal

Para dormir por tiempo o duración relativa, la función sleep_for () debe usarse, precedida por "this_thread ::" . La duración comienza desde cuando se ejecuta la función. La función principal () es el hilo principal, que no necesita ninguna declaración. En el siguiente programa, la función principal duerme por 1 segundo:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

cout <<"Code A goes here." <crono :: segundos ss (1);
this_thread :: sleep_for (ss);
cout <<"Code B goes here." <regresar 0;

La salida es:

El código A va aquí.

Y después de un segundo,

El código B va aquí.

se visualiza. Este programa de hilo no tiene una declaración de hilo; porque el hilo es la función principal (). Tenga en cuenta que la biblioteca Chrono, así como la biblioteca de subprocesos, se ha incluido.

La salida está a dos cadenas de la función principal. Entre estas cuerdas, está el código:

crono :: segundos ss (1);
this_thread :: sleep_for (ss);

Tenga en cuenta cómo se ha utilizado la función de sueño.

Hilo convencional

La explicación de los hilos convencionales es similar a la explicación anterior, pero el código de tiempo está en el cuerpo de hilo real. En el siguiente programa, el hilo duerme por 1 segundo:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
vacío funct ()
cout <<"Code A goes here." <crono :: segundos ss (1);
this_thread :: sleep_for (ss);
cout <<"Code B goes here." <
int main ()

hilo thr (funct);
thr.unirse();
regresar 0;

La salida es:

El código A va aquí.

Y después de un segundo,

El código B va aquí.

se visualiza. Aquí hay dos hilos: el hilo convencional y la función principal (). Tenga en cuenta que la biblioteca Chrono, así como la biblioteca de subprocesos, se ha incluido.

La salida son dos cadenas en el cuerpo de función de rosca convencional. Entre estas cuerdas, está el código:

crono :: segundos ss (1);
this_thread :: sleep_for (ss);

Tenga en cuenta la relación entre estas dos declaraciones.

Durmiendo por tiempo absoluto

Para dormir por tiempo absoluto, la función sleep_UnTil () debe usarse, precedida por "this_thread ::" . El tiempo comienza desde la época de Unix a un momento en el futuro. Si el argumento absoluto o del punto de tiempo está en el pasado, entonces se ignorará. Entonces, el hilo debería despertarse en el punto de tiempo en el futuro.

Función principal

La función principal () es el hilo principal, que no necesita ninguna declaración. En el siguiente programa, la función principal duerme hasta 1 segundo después de ahora, el tiempo del 1 de enero de 1970 (Epoch UNIX):

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

cout <<"Code A goes here." <Chrono :: System_Clock :: Time_Point tp = Chrono :: System_clock :: Now () + Chrono :: Seconds (1);
this_thread :: sleep_until (tp);
cout <<"Code B goes here." <regresar 0;

La salida es:

El código A va aquí.

Y después de un segundo,

El código B va aquí.

se visualiza. Este es un programa de un hilo que no tiene una declaración de hilo; porque el hilo es la función principal (). Tenga en cuenta que la biblioteca Chrono, así como la biblioteca de subprocesos, se ha incluido.

La salida es dos cadenas en la función principal. Entre estas cuerdas, está el código:

Chrono :: System_Clock :: Time_Point tp = Chrono :: System_clock :: Now () + Chrono :: Seconds (1);
this_thread :: sleep_until (tp);

Tenga en cuenta cómo se ha utilizado la función de sueño

Hilo convencional

La explicación de los hilos convencionales es similar a la explicación anterior, pero el código de tiempo está en el cuerpo de hilo real. En el siguiente programa, el hilo duerme hasta 1 segundo después de ahora:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
vacío funct ()
cout << "Code A goes here." <Chrono :: System_Clock :: Time_Point tp = Chrono :: System_clock :: Now () + Chrono :: Seconds (1);
this_thread :: sleep_until (tp);
cout << "Code B goes here." <
int main ()

hilo thr (funct);
thr.unirse();
regresar 0;

La salida es:

El código A va aquí.

Y después de un segundo,

El código B va aquí.

se visualiza. Aquí hay dos hilos: el hilo convencional y la función principal (). Tenga en cuenta que la biblioteca Chrono, así como la biblioteca de subprocesos, se ha incluido.

La salida es dos cadenas en el cuerpo de función de rosca convencional. Entre estas cuerdas, está el código:

Chrono :: System_Clock :: Time_Point tp = Chrono :: System_clock :: Now () + Chrono :: Seconds (1);
this_thread :: sleep_until (tp);

Tenga en cuenta la relación entre estas dos declaraciones.

Conclusión

Se puede hacer que duerma un hilo durante una duración o dormir y despertarse en un momento futuro desde la época de Unix. Para dormir durante una duración, use la función sleep_for (). Para dormir y despertarse, use la función sleep_until (). Cada una de estas funciones tiene que ser precedida por esto, "this_thread ::". Un programa C ++ simple normal es un programa enhebrado. El hilo aquí es la función principal () y no necesita una declaración de hilo.