티스토리 뷰

개발/일상

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';
}

 

'개발 > 일상' 카테고리의 다른 글

백준 학교 랭킹 30위 달성  (2) 2019.08.24
boost shared_from_this() bad_weak_ptr Exception 문제 해결  (0) 2019.08.13
c++ explicit 이란?  (0) 2019.07.27
Boost noncopyable  (0) 2019.07.19
개발 블로그 새로 시작!!  (0) 2019.07.19
댓글