zoukankan      html  css  js  c++  java
  • 并发编程: c++11 thread(Func, Args...)利用类成员函数创建线程

    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指回自己。

  • 相关阅读:
    寒假学习第一天
    课堂测试
    第十六周总结
    第十五周总结
    计算最长单词链
    第十四周总结
    人月神话阅读笔记03
    人月神话阅读笔记02
    第十五周学习进度
    冲刺第二十天
  • 原文地址:https://www.cnblogs.com/rangozhang/p/4468754.html
Copyright © 2011-2022 走看看