#include <thread> void func() { // do some work } int main() { std::thread t(func); t.join(); return 0; }
带参数
void func(int i, double d, const std::string& s) { std::cout << i << ", " << d << ", " << s << std::endl; } int main() { std::thread t(func, 1, 12.50, "sample"); t.join(); return 0; }
#include <thread> #include <iostream> #include <string> #include <functional> void greeting(std::string const& message) { std::cout<<message<<std::endl; } int main() { std::thread t(std::bind(greeting,"hi!")); t.join(); }
传引用
void func(int& a) //这里参数声明要是引用形式 { a++; } int main() { int a = 42; std::thread t(func, std::ref(a)); // 配合函数声明为引用形式,这两者同时存在,a的值才能改变。 t.join(); std::cout << a << std::endl; return 0; }
线程调用:类重载()
#include <thread> #include <iostream> class SayHello { public: void operator()() const { std::cout<<"hello"<<std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}; int main() { std::thread t((SayHello())); t.join();
SayHello hello; std::thread t1(hello); t1.join();
std::thread t2=std::thread(SayHello()); t2.join();
std::thread t3{ SayHello() };
t3.join();
}
线程调用:类成员函数:
#include <thread> #include <iostream> # include <memory> class SayHello { public: void greeting() const { std::cout << "hello" << std::endl; } void good(std::string const& message) const { std::cout << message << std::endl; } }; int main() { SayHello x; std::thread t(&SayHello::greeting, &x); std::thread t1(&SayHello::good, &x, "good"); t.join(); t1.join(); std::shared_ptr<SayHello> p(new SayHello); std::thread t2(&SayHello::good, p, "goodbye"); t2.join(); }