본문 바로가기
  • fishing...
  • eating...
MISCELLANEOUSNESS

boost thread sleep의 xtime의 nsec는 나노세컨드 단위였다.

by 회색뿔 2010. 1. 25.



별의 별 삽질을 다 햇다.

boost::thread를 사용하면서 이상하게 .join()만 수행하면 프로그램이 무한 대기 상태에 빠져 버린다.

인터넷을 검색해 보니 
boost::thread join wait problem이라는 글을 외국 포럼에서 봤다.
하지만, 정확한 해결 방법을 제시해 놓은거 같지는 않았다. 하지만, 착각이었다.

정확했다. greater than factor 지금보다 큰 수를 넣으라고 한 것이다.

이유 인 즉, boost::xtime의 nsec는 nano second의 약자였던 것이다. 
일반, 윈도우 프로그래밍시의 ms단위로 단정 지어 버린 실수로 많은 시간은 낭비한 것이다.

이런 중요한 것들은 좀 잘 큰 글씨로 써놓던가 표시를 해주지... 내가 본 자료에서는 이런 내용이 없었다.

슬프다.

void Run()
{
	boost::xtime xt;

	while( !m_isEnd )
	{
		Render();
		
		boost::xtime_get( &xt, boost::TIME_UTC );
		xt.nsec += 25000000;                // nano second
		boost::thread::sleep( xt );
	}
}

하지만 테스트 결과 이마저도 완벽한 해결방법이 아니다.

지금 현재는 join() 대신 timed_join( n )을 사용하여 n초 이후에는 강제 종료 되는 방법을 사용하고 있다.
따라서 Thread로 돌고 있는 함수에서는 절대 메모리 생성과 삭제를 하지 않는 방향으로 진행 하고 있다.

생성자, 소멸자에 주의하며, 메모리 릭이 발생하기 않게 주의하는 것만이 현재 내가 도출해낸 해결 방법이다.