Guía de concurrencia de C ++ std :: launch

Launch es un tipo de enumeración, se utiliza para iniciar una tarea asincrónica, los parámetros pasados ​​a la función async, su definición es la siguiente:

enum class launch {
    
    
	async = 0x1,
	deferred = 0x2
};

lanzamiento :: async

launch :: async significa que se creará un nuevo hilo cuando se llame a la función async.

#include<iostream>
#include<future>

using namespace std;
 
class ThreadManage
{
    
    
public:
	int myThread(int num)
	{
    
    
		cout << "Thread start id = " << this_thread::get_id() << endl;
		chrono::milliseconds time(5000); //休息5秒
		this_thread::sleep_for(time);
		cout << "Thread end id = " << this_thread::get_id() << endl;
		return num *2;
	}
};
 
int main()
{
    
    
	ThreadManage manage;
	cout << "Main start id = " << this_thread::get_id() << endl;
	future<int> result = async(std::launch::async, &ThreadManage::myThread,&manage,5);
	cout << "continue......" << endl;
	cout << "result = " << result.get() << endl; //阻塞,等待线程myThread结束,获取返回。
    	return 0;
}

lanzamiento :: diferido

Launch :: deferred significa llamada retrasada La función de entrada se ejecuta solo cuando se llama a la función wait () o get () en el futuro. (De hecho, no se crea ningún hilo nuevo, es la función de entrada llamada en el hilo principal, que se prueba imprimiendo el ID del hilo a continuación).
Cambie launch :: async en el ejemplo anterior a launch :: deferred para comparar las diferencias entre los dos.

lanzamiento :: async | lanzamiento :: diferido

Se puede crear un nuevo hilo o se puede retrasar la llamada. El sistema seleccionará el método apropiado de acuerdo con la situación actual de los recursos.
Cuando no se incluye el parámetro de lanzamiento, el efecto es el mismo que launch :: async | launch :: deferred. También es posible crear un nuevo hilo o retrasar la llamada.

Supongo que te gusta

Origin blog.csdn.net/qq_24649627/article/details/114970146
Recomendado
Clasificación