博客 `[c++11特性之std::thread--初识](http://blog.csdn.net/wangshubo1989/article/details/49592517 "std::thread")`
讲了std::thread::join和std::thread::detach的用法。今天就再来点深入的。
先看看这个:
~~~
int main()
{
std::thread t(&thread_function);
std::cout << "main thread\n";
// t.join();
t.detach();
t.join(); // Error
return 0;
}
~~~
**一旦 detached, 就不能再join**
这个时候总要有新东西出场了:
**joinable()**
~~~
#include <iostream> // std::cout
#include <thread> // std::thread
void mythread()
{
// do stuff...
}
int main()
{
std::thread foo;
std::thread bar(mythread);
std::cout << "Joinable after construction:\n" << std::boolalpha;
std::cout << "foo: " << foo.joinable() << '\n';
std::cout << "bar: " << bar.joinable() << '\n';
if (foo.joinable()) foo.join();
if (bar.joinable()) bar.join();
std::cout << "Joinable after joining:\n" << std::boolalpha;
std::cout << "foo: " << foo.joinable() << '\n';
std::cout << "bar: " << bar.joinable() << '\n';
return 0;
}
~~~
之前的例子中, 我们都是使用的普通的函数. 我们本可以使用更多,尤其你要牢记的就是c++是一个面向对象。
~~~
#include <iostream>
#include <thread>
class MyFunctor
{
public:
void operator()() {
std::cout << "functor\n";
}
};
int main()
{
MyFunctor fnctor;
std::thread t(fnctor);
std::cout << "main thread\n";
t.join();
return 0;
}
~~~
上面的代码,我创建了一个函数对象,把它付给一个线程任务
也许你会像下面这样写:
~~~
std::thread t(MyFunctor());
~~~
但是,编译时通不过的,你应该这样写:
~~~
std::thread t((MyFunctor()));
~~~
**必须加一个 () 来封装 MyFunctor().**
- 前言
- 吐血整理C++11新特性
- C++11新特性之std::function
- c++11特性之正则表达式
- c++11特性之Lambda表达式
- c++11特性之override和final关键字
- c++11特性之std::thread--初识
- c++11特性之std::thread--初识二
- c++11特性之initializer_list
- c++11特性之std::thread--进阶
- c++11特性之std::thread--进阶二
- C++11新特性之 CALLBACKS
- C++11新特性之 std::array container
- C++11新特性之 nullptr
- C++11新特性之 rvalue Reference(右值引用)
- C++11新特性之 Move semantics(移动语义)
- C++11新特性之 default and delete specifiers
- C++11新特性之 Static assertions 和constructor delegation
- 开始使用C++11的几个理由
- C++11新特性之 std::future and std::async