ThreadNote
C++11 之前
参数
说明
thread
子例程返回的新线程的不透明的唯一标识符。
attr
一个opaque属性对象,可用于设置线程属性。您可以指定线程属性对象,或者为默认值指定NULL。
start_routine
线程创建后将执行的C ++例程。
arg
可以传递给start_routine的单个参数。它必须通过引用传递为void类型的指针转换。如果不传递参数,则可以使用NULL。
C++11
构造函数
构造函数
说明
备注
thread() noexcept;
默认构造函数
创建空的std::thread执行对象
template explicit thread (Fn&& fn, Args&&... args);
初始化
创建std::thread对象,该对象可被joinable,信产生的线程会调用fn函数,该函数的参数由args给出
thread (const thread&) = delete;
拷贝构造(被禁用 - delete)
意味着std::thread对象不可被拷贝
thread (thread&& x) noexcept;
移动构造
调用成功之后x不代表任何std::thread执行对象
Example
赋值操作
赋值
说明
备注
thread& operator=(thread&& rhs) noexcept;
Move 赋值操作
如果当前对象不可 joinable
,需要传递一个右值引用(rhs
)给 move
赋值操作;如果当前对象可被 joinable
,则会调用 terminate
() 报错。
thread& operator=(const thread&) = delete;
拷贝赋值操作 [deleted]
被禁用,因此 std::thread
对象不可拷贝赋值。
其他成员函数
get_id()
:获取线程IDjoinable()
:检查线程是否可被join检查当前的线程对象是否表示了一个活动的执行线程,由默认构造函数创建的线程是不能被 join 的
如果某个线程 已经执行完任务,但是没有被 join 的话,该线程依然会被认为是一个活动的执行线程,因此也是可以被 join 的
detach
:将当前线程对象所代表的执行实例与该线程对象分离,使得线程的执行可以单独进行。一旦线程执行完毕,它所分配的资源将会被释放。swap
:交换两个线程对象所代表的底层句柄(underlying handles)native_handle
:返回 native handle
终止线程
向线程发送终止信号,并不能立即终止线程运行,只有在线程运行到检查点时,才会终止。
std::this_thread
get_id()
std::this_thread::get_id()
sleep_for()
std::this_thread::sleep_for(std::chrono::seconds(1))
线程休眠某个指定的时间片
yield()
std::this_thread::yield
放弃当前线程执行
sleep_until()
线程休眠至某个指定的时刻,该线程才被重新唤醒
sleep_for
Examples
主线程早于子线程退出
子线程会被迫终止
线程作为方法参数
判断线程是否有效
可以通过
joinable
方法判断线程对象有没有被初始化
PS
std::thread::native_handle()
函数只有在调用join()
和detach()
之前有效,之后调用会返回 0,如果此时再调用pthread_cancel()
传入返回值,试图这样来结束改进程(由于返回值是0,并不能结束该线程),会产生core dump
线程+lambda
参考
编译
最后更新于
这有帮助吗?