今天在偶然在找尋有關OpenCV的演算法實作方法時,看到了大牛們使用了packaged_task的這樣一個函數。
自己是沒見過的,當然就趕快操起google搜尋及手邊資料進行搜查。
並自己在網絡上找了一些視頻資源加以學習,並在此留下筆記,用來強化記憶及供人及自己日後參考。
推薦學習視頻連結:youtube:C++ Threading #9: packaged_task
Bo qian大神的一系列視頻講的真是不錯,每次都能從他的代碼中學到許多東西,因此真心推薦。
進入正文:
首先先附上來自cppreference.com的C++字典說明。來源連結
packaged_task被定義在頭文件<future>當中,而看到<future>這個頭文件,應該很多同學都跟我一樣心裡有了個底,這是個將會是個異步函數的調用
,就跟我們想的一樣,它確實就是如此。
這個模板函數能封裝任何callable的物件,包括function,lambda,bind expresion,function object,)而被包裝在其中的函數
將會被以異步的方式進行調用。
這是它的建構子。
template< class > class packaged_task; //not defined
|
(1) | (since C++11) |
template< class R, class ...Args > class packaged_task<R(Args...)>; |
(2) | (since C++11) |
恩..確實有些難懂,不如先來看一下大至的使用方法
int Factorial(int N) //被包裝函數的宣告及實現 { int res=1; for(int i=N;i>1;i--) res*=i; std::cout<<"Result is"<<res<<std::endl; return res; } std::deque<std::packaged_task<int()>> task_q; //packeged_task的容器 int main() { std::packaged_task<int(