boost::threads で pantheios ログ ライブラリを使用すると問題が発生します。スレッドを作成する前に pantheios ロギングを使用すると、segfault が発生するようです。
たとえば、次のように動作します。
thread_ = new boost::thread(&foo);
pantheios::log(pantheios::debug, "Hello world");
start_thread
しかし、ステートメントの順序が入れ替わると、スタック トレースによって、boost でクラッシュしたことがわかります。
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
ます。もう一度 2 行を交換するmain
と、問題なく動作します。