2009-04-22 3 views
8

부스트 스레드를 만들었습니다 : boost :: thread thrd (& connectionThread); 여기서 connectionThread는 단순한 void 함수입니다.C++ 부스트 스레드를 1 초간 대기

boost::xtime xt; 

boost::xtime_get(&xt, boost::TIME_UTC); 

xt.sec += 1; 

boost::thread::sleep(xt); // Sleep for 1 second 

이 프로그램은 xtime_get 라인에 충돌 : 나는 그것을 사용 예를 들어, 몇 초 동안 기다리 만들려고 할 때, 그러나 잘 작동합니다. 수동으로 xt.sec를 설정하려고해도 작동하지 않습니다. 여러 가지 다른 방법을 시도했지만 작동하도록 만들 수 없습니다. 내가 뭘 잘못하고 있니? 내 목표를 달성하는 쉬운 방법이 있습니까?

+2

더 많은 정보 흐름 : –

+0

xt.sec을 수동으로 설정할 때 어떤 방식으로 작동하지 않습니까? xt.sec = 1은 초가 적어도 밀리 세컨드라고 생각하기 때문에 아마 엄청나게 짧은 시간 일 것입니다. 그렇다면 1 밀리 초 동안 잠들 것입니다. – Skurmedel

+3

http://www.boost.org/doc/libs/1_38_0/doc/html/thread/time.html#thread.time.system_time 라이브러리의 최신 버전이 이제 boost ::의 구성 요소를 사용하는 것처럼 보입니다. date_time - 기간을 지정합니다. – Skurmedel

답변

0

그 코드 (예를 들어, 어디에 놓았는지 알지 못함)를 사용하면 xtime_get 메서드가 반환되는 측정 값의 형식을 반환한다는 것을 알 수 있습니다. 즉, 다음 어설 보유하고 있음을 예를 들어, 확인해야한다는 것입니다 :

int res = boost::xtime_get(&xt, boost::TIME_UTC); 
assert(res == boost::TIME_UTC); 

그것은 당신의 시스템에서 그렇지 않은 일이 발생할 수 있습니다.

그러나 코드를 다시 보면 크래시가이 호출과 관련이 없지만 응용 프로그램에서 수행중인 다른 것들과 관련되어있을 수 있습니다. 다시 말하지만,이 코드를 사용하는 위치에 따라 다릅니다. 스레드의 operator() 내에 있습니까?

2

boost::xtime_get()은 헤더에 구현되지 않은 몇 가지 부스트 API 중 하나처럼 보이므로 부스트 라이브러리를 올바르게 컴파일하지 않은 것과 비슷합니다. 이것은 부적절한 호출 규칙 또는 뭔가가있는 것과 같이 아마 somelike 일 것입니다. 라이브러리를 다시 작성하기 위해 어떤 단계를 거쳐야 하는지를 내 머리 꼭대기에서 알지 못합니다. Boost에서 사용한 적이있는 것은 헤더 만 필요한 것입니다.

어셈블리 수준 일지라도 xtime_get() 루틴을 추적하면 도움이 될 수 있습니다. xtime 구조체는 매우 기본적이고 xtime_get()은 숫자를 xtime 구조체에 연결하기 위해 플랫폼 별 API를 호출하는 것 이상을 수행하지 않습니다.

boost::this_thread::sleep(boost::posix_time::seconds(1)); 

boost::thread::sleep(boost::posix_time::seconds(1)); 

26

는 쉬운 방법을

아마도 이러한 라인을 따라 뭔가를 거기에 이온 필요 -이 xtime_get 줄에 충돌? 그렇다면 수동으로 xt를 설정할 때 충돌이 발생합니다 (또는 원하는대로 동작하지 않습니다)?

+1

처럼 헤더 파일 을 포함하는 것을 잊지 않기를 바란다. 첫 번째 작업은 괜찮다. – MiniScalope