首页 > 代码库 > 线程基础2

线程基础2

#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();}

 

线程基础2