0
나는 boost :: threads로 pantheios 로깅 라이브러리를 사용하는데 약간의 문제가있다. 스레드를 만들기 전에 pantheios 로깅을 사용하면 segfault를 얻게됩니다.Pantheios and boost :: thread
예를 들어, 다음은 작동합니다 :
thread_ = new boost::thread(&foo);
pantheios::log(pantheios::debug, "Hello world");
그러나 문장의 순서가 전환되는 경우, 스택 추적 내가 부스트에 start_thread
에 충돌 것을 알 수
pantheios::log(pantheios::debug, "Hello world");
thread_ = new boost::thread(&foo);
// SEGFAULT!
아이디어가 있으십니까?
편집 : 더 컨텍스트
int main()
{
pantheios::log(...);
MyClass myClass(/* some arguments, which are all literals */);
// Do some more work
return 0;
}
// MyClass constructor
MyClass::MyClass(/* args */)
: member1_(arg1)
, member2_(arg2)
{
thread_ = new boost::thread(&MyClass::workerLoop, this);
}
// Destructor
MyClass::~MyClass()
{
thread_->join();
delete thread_;
}
이 start_thread
에서 세그 폴트 것입니다. 다시 한번 내가 두 라인을 main
로 바꾸면 문제없이 작동 할 것입니다.
무엇이'foo'입니까? 그것은 어떤 로깅을합니까? 어떤 전역 변수를 사용합니까? –
'foo'는 실제로 클래스의 멤버 함수입니다. boost :: bind를 사용하여 클래스 'this'에 바인딩됩니다. foo는 pantheios도 사용하며 네트워크 소켓을 사용합니다. pantheios하지만 스레드 친화적 인 것으로 간주됩니다 ... –
당신은 포인터를 전달하고있어, '& foo', 그래서 그것은 멤버 함수 또는 boost :: bind'에 의해 반환 된 함수 객체가 될 수 없습니다. 'foo'가 스택에 선언되어 있습니까? 그것은 범위를 벗어나나요? 더 많은 코드를 보여주십시오. –