개발/일상
boost::thread bind object
clucle
2019. 8. 7. 19:33
boost thread에서 호출하는 함수에 인자가 없는데 this 를 사용하는 것을 보고 의문이 들어서 사용방법을 찾아보았다.
object에 속해있지 않은 함수 혹은 static한 함수를 부를때는 boost::thread(function address, argument)를 사용하고
ㄴ do_something, do_static_something
object 바깥에서 object를 bind 할때는 boost::thread(function address, object address, argument)
object 스스로 bind 할때는 boost::thread(function address, this, argument) 로 사용한다.
ㄴ Test::do_something
#include <iostream>
#include <boost/thread.hpp>
void do_something(int a, int b);
class Test {
public:
Test(int a = 0, int b = 0) : a_(a), b_(b) {};
void do_something(int a, int b) {
std::cout << "do_something in class " << a << ' ' << b << '\n';
}
void run() {
boost::thread t_non_static = boost::thread(&Test::do_something, this, a_, b_);
t_non_static.join();
}
static void do_static_something(int a, int b) {
std::cout << "do_static_something in class " << a << ' ' << b << '\n';
}
private:
int a_, b_;
};
int main(int argc, char* argv[])
{
boost::thread t = boost::thread(do_something, 1, 2);
t.join();
boost::thread t_static = boost::thread(&Test::do_static_something, 3, 4);
t_static.join();
Test* test = new Test();
boost::thread t_non_static = boost::thread(&Test::do_something, test, 5, 6);
t_non_static.join();
delete test;
Test* test2 = new Test(7, 8);
test2->run();
delete test2;
return 0;
}
void do_something(int a, int b) {
std::cout << "do_something " << a << ' ' << b << '\n';
}