创建线程
头文件:#include
线程类:std::thread
构造函数:
1)thread() noexcept;
默认构造函(一般不用),构造一个线程对象,不执行任何任务(不会创建/启动子线程)。
2)template< class Function, class... Args >
explicit thread(Function&& fx, Args&&... args );
创建线程对象,在线程中执行任务函数fx中的代码,args是要传递给任务函数fx的参数。
任务函数fx可以是普通函数、类的非静态成员函数、类的静态成员函数、lambda函数、仿函数。
实际开发中,99%用的是这个构造函数
有两个模板参数,第一个参数时函数对象,第二个参数时可变参数包。
3)thread(const thread& ) = delete;
删除拷贝构造函数,不允许线程对象之间的拷贝。
4)thread(thread&& other ) noexcept;
移动构造函数,将线程other的资源所有权转移给新创建的线程对象。转移之后,原来的线程对象不再代表线程。
赋值函数:
thread& operator= (thread&& other) noexcept;
thread& operator= (const other&) = delete;
线程中的资源不能被复制,如果other是右值,会进行资源所有权的转移,如果other是左值,禁止拷贝。
注意:
-先创建的子线程不一定跑得最快(程序运行的速度有很大的偶然性)。
-线程的任务函数返回后,子线程将终止。
-如果主程序(主线程)退出(不论是正常退出还是意外终止),全部的子线程将强行被终止。
1155

被折叠的 条评论
为什么被折叠?



