1. 程式人生 > >LAMBDA表示式與執行緒及執行緒等待和獲取執行緒ID

LAMBDA表示式與執行緒及執行緒等待和獲取執行緒ID

本程式碼主要是使用LAMBDA表示式與執行緒的一起使用,還有執行緒的幾個方法的測試:

如:獲取執行緒的ID、執行緒等待,執行緒等待的幾種方法如下:

this_thread::sleep_for(chrono::seconds(3));//執行緒等待 3 秒
this_thread::yield();//讓CPU先執行其他執行緒,空閒時再執行些執行緒
this_thread::sleep_until();//到某個時刻到來之前一直等待,定時等待。

測試程式碼如下:

/*
C++中建立多執行緒,建議使用LAMBDA表示式
下面幾個引數在 迅雷 的定時下載中都有體現 如空間下載、定時下載.......
this_thread::sleep_for()	//等待多少秒後執行。
this_thread::yield();		//CPU空閉了才執行行
this_thread::sleep_unitl();	//等到某個時間點時才執行
this_thread::get_id()	//獲取執行緒ID
*/
#include<iostream>
#include<thread>
#include<chrono>
#include<Windows.h>

using namespace std;

//執行緒等待與獲取執行緒 ID
void main4C()
{
	thread th1([](){
		
		this_thread::sleep_for(chrono::seconds(3));	//執行緒等待 3 秒
		//this_thread::yield();	//讓CPU先執行其他執行緒,空閒時再執行些執行緒
		//this_thread::sleep_until();	//到某個時刻到來之前一直等待,定時等待。
		cout << this_thread::get_id() << endl;		//獲取執行緒的 ID
	});

	thread th2([](){
		this_thread::sleep_for(chrono::seconds(10));	//執行緒等待 10 秒
		cout << this_thread::get_id() << endl;
	});

	th1.join();
	th2.join();

	cin.get();
}

void main4b()
{	
	thread th1([](){MessageBoxA(0, "1", "2", 0); });
	thread th2([](){MessageBoxA(0, "1", "2", 0); });
	th1.join();
	th2.join();

	cin.get();
}

void main4a()
{
	auto fun = [](){MessageBoxA(0, "1", "2", 0); };
	thread th1(fun);
	thread th2(fun);
	th1.join();
	th2.join();

	cin.get();
}