Compartir a través de


<future>

Incluya el encabezado estándar <future> para definir plantillas de clase y plantillas auxiliares que simplifican la ejecución de una función, posiblemente en un subproceso diferente, y la recuperación de su resultado. El resultado es el valor devuelto por la función o una excepción que la función emite pero que no se detecta en la función.

Este encabezado utiliza el runtime de simultaneidad (ConcRT) para que pueda utilizarlo junto con otros mecanismos de ConcRT. Para obtener más información sobre ConcRT, vea Runtime de simultaneidad.

Sintaxis

#include <future>

Comentarios

Nota:

En el código que se compila mediante /clr, este encabezado está bloqueado.

Un proveedor asincrónico almacena el resultado de una llamada de función. Se usa un objeto de devolución asincrónico para recuperar el resultado de una llamada de función. Un estado asincrónico asociado proporciona la comunicación entre un proveedor asincrónico y uno o varios objetos de devolución asincrónicos.

Un programa no crea directamente ningún objeto con un estado asincrónico asociado. El programa crea un proveedor asincrónico cuando necesita uno y a partir de él crea un objeto de devolución asincrónico que comparte su estado asincrónico asociado con el proveedor. Los proveedores asincrónicos y los objetos de devolución asincrónicos administran los objetos que contienen su estado asincrónico asociado compartido. Cuando el último objeto que hace referencia al estado asincrónico asociado lo libera, se destruye el objeto que contiene el estado asincrónico asociado.

Un proveedor asincrónico o un objeto de devolución asincrónico que no tiene ningún estado asincrónico asociado está vacío.

Un estado asincrónico asociado está listo solo si su proveedor asincrónico ha almacenado un valor devuelto o ha almacenado una excepción.

La función de plantilla async y las plantillas de clase promise y packaged_task son proveedores asincrónicos. Las plantillas de clase future y shared_future describen objetos de devolución asincrónicos.

Cada una de las plantillas de clase promise, future y shared_future tiene una especialización para el tipo void y una especialización parcial para almacenar y recuperar un valor por referencia. Estas especializaciones solo difieren de la plantilla principal en las signaturas y la semántica de las funciones que almacenan y recuperan el valor devuelto.

Las plantillas de clase future y shared_future nunca se bloquean en sus destructores, excepto en un caso que se conserva por compatibilidad con versiones anteriores: a diferencia de todos los demás future, para un future (o para el último shared_future) que está adjunto a una tarea iniciada con std::async, el destructor se bloquea si la tarea no se ha completado; es decir, se bloquea si este subproceso no ha llamado aún a .get() o .wait() y la tarea todavía se está ejecutando. Se ha agregado la siguiente nota de facilidad de uso a la descripción de std::async en el borrador estándar: "[Nota: Si un futuro obtenido de std::async se mueve fuera del ámbito local, otro código que usa el futuro debe tener en cuenta que el destructor del futuro puede bloquear para que el estado compartido esté listo.—end note]" En todos los demás casos, future y shared_future los destructores son necesarios y se garantiza que nunca se bloqueen.

Miembros

Clases

NOMBRE Descripción
future (Clase) Describe un objeto de devolución asincrónico.
future_error (Clase) Describe un objeto de excepción que pueden producir los métodos de tipos que administran objetos future.
packaged_task (Clase) Describe un proveedor asincrónico que es un contenedor de llamadas y cuya signatura de llamada es Ty(ArgTypes...). Su estado asincrónico asociado contiene una copia del objeto al que se puede llamar, además del resultado posible.
promise (Clase) Describe un proveedor asincrónico.
shared_future (Clase) Describe un objeto de devolución asincrónico. Al contrario que un objeto future, un proveedor asincrónico se puede asociar a cualquier número de objetos shared_future.

Estructuras

Nombre Descripción
is_error_code_enum (Estructura) Especialización que indica que se puede utilizar future_errc para almacenar un elemento error_code.
uses_allocator (Estructura) Especialización que siempre contiene true.

Funciones

Nombre Descripción
async Representa un proveedor asincrónico.
future_category Devuelve una referencia al objeto error_category que caracteriza los errores asociados a objetos future.
make_error_code Crea un elemento error_code que tiene el objeto error_category que caracteriza los errores de future.
make_error_condition Crea un elemento error_condition que tiene el objeto error_category que caracteriza los errores de future.
swap Intercambia el estado asincrónico asociado de un objeto promise con el de otro.

Enumeraciones

Nombre Descripción
future_errc Proporciona nombres simbólicos para los errores notificados por la clase future_error.
future_status Proporciona nombres simbólicos para los motivos que una función que ha agotado el tiempo de espera puede devolver.
launch Representa un tipo de máscara de bits que describe los posibles modos para la función de plantilla async.

Consulte también

Referencia de archivos de encabezado