程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 並發編程: c++11 thread(Func, Args...)利用類成員函數創建線程,funcargs...

並發編程: c++11 thread(Func, Args...)利用類成員函數創建線程,funcargs...

編輯:C++入門知識

並發編程: c++11 thread(Func, Args...)利用類成員函數創建線程,funcargs...


c++11是VS2012後支持的新標准,為並發編程提供了方便的std::thread。

使用示例:

#include <thread>

void thread_func(int arg1, int arg2, float* arg3){
    arg3 = (arg1*1.0)/(arg1 + arg2);
    cout << "arg1 / (arg1 + arg2) = " << arg3 << endl;
    return;
}

void main(){
    //線程數
    int threadNum = 3

    //動態分配
    thread* t;
    t = new thread[threadNum];

    //結果
    float *result =  (float *)malloc(threadNum*sizeof(float));
    
    for ( int i = 0; i < threadNum; i++){
        t[i] = thread(thread_func, i, i, &result[i]);    
    }

    for ( int i = 0; i < threadNum; i++){
        //t[i].detach(); //主進程不等子進程運行完
        t[i].join();        //主進程等
    }

    //post-processing towards result...
}

當需要利用類成員函數( MyClass::thread_func )來創建子線程時,需如下碼碼:

t[i] = thread(std::mem_fn(&MyClass::thread_func), Object, args..);    

如果thread_func為static,則不用寫object。否則需要,如主進程所調函數也為該類成員,則傳入this指回自己。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved