码迷,mamicode.com
首页 > 编程语言 > 详细

创建线程

时间:2020-06-23 01:19:29      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:end   主线程等待子线程   多线程程序   多线程   turn   bsp   程序   size   类对象   

一、创建线程

1、通过函数来初始化线程

void MyPrint()
{
    cout << "自定义线程" << endl;
    cout << "自定义线程结束" << endl;
}

int main()
{
    std::thread mythread(MyPrint);  // (1)thread是一个类,接受的参数是一个可调用对象
    // 创建了线程,线程入口为MyPrint(),并且该线程开始执行
    
    mythread.join();   // (2)join() 加入/汇合,阻塞主线程,当子线程执行完,主线程再继续往下走
    // 让主线程等待子线程执行完毕,完后子线程和主线程汇合,然后主线程再往下走
    // 一般情况下,主线程需要等子线程执行完毕之后,自己才能退出

    mythread.detach();
    // detach() :传统多线程程序,主线程要等待子线程执行完毕,然后最后退出
    // 主线程不必等子线程运行结束,
    // 一旦detach()后,子线程与主线程失去关联,此时子线程会驻留在后台运行,
    // 这个子线程相当于被C++运行时刻接管,当子线程执行完毕后,由运行时库清理该线程相关的资源
    // detach()使线程失去自己的控制,而且detach()后无法在join()回来,所以一般不推荐使用

    if (mythread.joinable())
    {
        mythread.join();
    }
    // joinable():
    // 没有join()过得,返回true
    // join() 过,或者detach()过,返回false

    cout << "主线程" << endl;
    system("pause");
    return 0;
}

2、通过类对象来初始化线程

class Element
{
public:
    void operator ()()  // 重载() 运算符,后面一个()表示不带参
    {   
        // 重载类的()运算符,作为线程的入口函数
        cout << "类对象作为可调用对象的线程入口" << endl;
    }
};

// 使用
Element ele;
thread myThread(ele);  // 用类对象作为调用对象来初始化线程
myThread.join();

3、通过lambda表达是来初始化线程

// myLambda 可写在 main() 函数中
auto myLambda = []
{
    // Lambda表达式作为线程入口
    cout << "Lambda表达式作为线程入口" << endl;
}

thread myThread(myLambda);  // 用类对象作为调用对象来初始化线程
myThread.join();

 

 

 

 

void MyPrint(){cout << "自定义线程" << endl;cout << "自定义线程结束" << endl;
}
int main(){std::thread mythread(MyPrint);  // (1)thread是一个类,接受的参数是一个可调用对象// 创建了线程,线程入口为MyPrint(),并且该线程开始执行mythread.join();   // (2)join() 加入/汇合,阻塞主线程,当子线程执行完,主线程再继续往下走// 让主线程等待子线程执行完毕,完后子线程和主线程汇合,然后主线程再往下走// 一般情况下,主线程需要等子线程执行完毕之后,自己才能退出
mythread.detach();// detach() :传统多线程程序,主线程要等待子线程执行完毕,然后最后退出// 主线程不必等子线程运行结束,// 一旦detach()后,子线程与主线程失去关联,此时子线程会驻留在后台运行,// 这个子线程相当于被C++运行时刻接管,当子线程执行完毕后,由运行时库清理该线程相关的资源// detach()使线程失去自己的控制,而且detach()后无法在join()回来,所以一般不推荐使用
if (mythread.joinable()){mythread.join();}// joinable():// 没有join()过得,返回true// join() 过,或者detach()过,返回false
cout << "主线程" << endl;system("pause");return 0;}

 

创建线程

标签:end   主线程等待子线程   多线程程序   多线程   turn   bsp   程序   size   类对象   

原文地址:https://www.cnblogs.com/zhiminzeng/p/13179711.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!