线程基础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();
}

 

posted @ 2016-09-09 19:20  于光远  阅读(128)  评论(0编辑  收藏  举报