본문 바로가기

프로그램언어/boost

[ Boost ] Boost::thread #2

Boost 목록
 

링크 : http://tingcobell.tistory.com/295


간단한 셈플을 만들어 봤습니다. 싱글 스레드와 멀티 스레드 모두 간략하게 구현하고 그에 준하는 내용을 천천히 이해하려고 합니다.

최종 목표는 boost::asio을 네트워크 라이브러리에 붙이는 것이 최종 목표입니다. 하지만 기본적인 내용을 알면 좋겠다라는 생각에 부가적인 기능을 공부한 후, asio을 사용해서 네트워크 구성을 해보려고 합니다.

#include <iostream>

#include <boost/thread.hpp>


class BoostTest

{

public:

BoostTest() : stopCount( 0 )

{

}

~BoostTest()

{


}


public:

void start( int _thread)

{

threadStop = true;

boostThread = boost::thread(&BoostTest::processQueue, this, _thread );

}


void join()

{

boostThread.join();

}


void stop()

{

threadStop = false;

}


void processQueue( unsigned _timer )

{

float ms = _timer * 1e3;

//boost::posix_time::microseconds timer(ms);

boost::posix_time::milliseconds timer( ms );


std::cout << "BoostThread: started, for ms : " << ms << std::endl;

while( threadStop ) 

{

std::cout << " stop Count : " << stopCount << "\t thread Id " << boost::this_thread::get_id() << std::endl;

if( stopCount == 10 )

{

this->stop();

}

stopCount++;

boost::this_thread::sleep( timer );

}


}


private:

boost::thread boostThread;

int stopCount;

volatile bool threadStop;

};


int main()

{

std::cout << "Debug: thread test startup!" << std::endl;


BoostTest test;


test.start( 3 );


std::cout << "Debug: waiting for thread" << std::endl;


test.join();


std::cout << "Debug: done " << std::endl;


return 0;

}


 
간단하게 구성해봤습니다. 메뉴얼에 충실하지 못해서 thread id을 얻기 위해서 실수한 것이 boost::thread::get_id()

맴버 함수를 호출하니 깨져서 뭐지 했는데 메뉴얼을 보니깐 잘못된 것을 알았습니다.



 내용을 계속 추가 보강합니다.

'프로그램언어 > boost' 카테고리의 다른 글

[ Boost ] Boost::thread #4  (0) 2011.05.12
[ Boost ] Boost::thread #3  (1) 2011.05.11
[ Boost ] Boost.thread #1  (2) 2011.05.03
[ Boost ] Boost.array 관련 예제 만들어보기  (0) 2011.05.03
[ Boost ] Boost.Array Description  (0) 2011.05.03