0

我在使用带有 boost::threads 的 pantheios 日志库时遇到了一些问题。似乎如果我在创建线程之前使用任何 pantheios 日志记录,我会得到一个段错误。

例如,以下将起作用:

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. 如果我再次交换其中的两条线,main它将毫无问题地工作。

4

1 回答 1

0

看来我想通了。我正在链接到不同版本的boost. 我的系统有 boost 版本 1.40,而我也在使用我下载的更新版本的 boost,1.49。值得注意的是,我链接的 boost 线程是旧版本的。

一旦我使链接保持一致,一切都按预期工作。

于 2012-06-26T17:13:40.113 回答