Por ejemplo C ++ 11 multi-roscado asíncrono, futuro, packaged_task, noveno promesa


(1) std :: asíncrono, std :: futuro para crear tareas en segundo plano y de retorno
(2) std :: packaged_task
(3) std :: Promise
(4) Resumen de
una, std :: asíncrono, std :: futuro y crear tareas en segundo plano retorno de
espera vuelve hilo resultado;
std :: la función asíncrona es una plantilla que se utiliza para iniciar una tarea asincrónica, después de la puesta en marcha de una tarea asíncrona,
regresó a un std :: futuros objetos, std :: futuro es una plantilla de clase
lo que es iniciar una tarea asincrónica ah?
Eso crea automáticamente un hilo y comienza a ejecutar la función de entrada a la rosca correspondiente, que devuelve un
objeto std :: futuro que contiene los resultados devueltos por el hilo de función (los resultados de retorno de hilo).
Usted puede obtener los resultados por la función get miembro de std :: futuro objeto ().
std :: futuro proporcionan un mecanismo para acceder a los resultados de las operaciones asincrónicas, los resultados no se pueden obtener de inmediato,
pero cuando el hilo terminado la ejecución, se puede llegar a los resultados, el futuro de los objetos de un valor almacenado, es el resultado,

# include <futuro>
#include <lista>
#include <mapa>
#include <mutex>
#include <hilo>

int thread_fun () //线程入口函数
{
    cout << "thread_fun comenzar thread_id =" << std :: :: this_thread get_id () << endl;
    std :: crono :: milisegundos duramadre (5000); //休息5秒
    std :: this_thread :: sleep_for (dura); //休息一定时长
    cout << "extremo thread_fun thread_id =" << std :: this_thread :: get_id () << endl;
    
    volver 5;
}

int main ()
{
    // std :: futura siguientes objetos de programa obtienen función miembro () para esperar el resultado de la ejecución del hilo y devuelve el resultado
    tribunal << "thread_id principal =" << std :: :: this_thread get_id () << endl;
    std :: futuro <int> resultado = std :: asíncrono (thread_fun); // crear un hilo, y comenzar a aplicar
    la relación vinculante, el proceso no será atrapado aquí
    tribunal << "el continuar ..." << endl;
    int DEF = 0;

    tribunal << result.get () << endl; // será la primera tarjeta en el get () aquí, espera hasta thread_fun ejecutado, para obtener el valor de retorno, a continuación, el programa continuará con rosca hacia abajo.
    
    //result.wait();// esperar rendimientos de hilo, sí no return resultado;
    cout << "Fin ..." << endl;
    return 0;
    
}


clase B
{
público:
    int thread_fun (int my_mun) //线程入口函数
    {
        cout << my_mun << endl;
        tribunal << "thread_fun comenzar thread_id =" << std :: :: this_thread get_id () << endl;
        std :: crono :: milisegundos duramadre (5000); //休息5秒
        std :: this_thread :: sleep_for (dura); //休息一定时长
        cout << "extremo thread_fun thread_id =" << std :: this_thread :: get_id () << endl;
        
        volver 5;
    }
}


int main ()
{
    A A1;
    int = 12 es Mun;
    objetos // std :: programa futuro, tras get () función miembro y devuelven el resultado de la ejecución de subprocesos en espera como resultado
    tribunal << "thread_id principal =" << std :: :: this_thread get_id () << endl;
    std :: futuro <int> el Resultado = std :: la asíncrono (y un :: thread_fun, & a, NUM); // crear un hilo, y comenzar a aplicar
    la relación vinculante, el proceso no será atrapado aquí
    << COUT "Continuar ..." << endl;
    int DEF = 0;

    tribunal << result.get () << endl; // será la primera tarjeta en el get () aquí, espera hasta thread_fun ejecutado, para obtener el valor de retorno, a continuación, el programa continuará con rosca hacia abajo.
    
    //result.wait();// esperar rendimientos de hilo, sí no return resultado;
    cout << "Fin ..." << endl;
    return 0;
    
}
 

Publicados 101 artículos originales · ganado elogios 73 · vistas 120 000 +

Supongo que te gusta

Origin blog.csdn.net/usstmiracle/article/details/104447919
Recomendado
Clasificación