0

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と、問題なく動作します。

4

1 に答える 1

0

私はそれを理解したように見えます。の異なるバージョンにリンクしていましたboost。私のシステムにはブースト バージョン 1.40 がありましたが、ダウンロードした新しいバージョンのブースト 1.49 も使用していました。私がリンクしていたブーストスレッドは古いバージョンのものでした。

一貫性のあるブーストへのリンクを作成すると、すべてが期待どおりに機能しました。

于 2012-06-26T17:13:40.113 に答える