在boost :: thread join中EXC BAD ACCESS

时间:2012-11-29 20:18:47

标签: c++ multithreading boost exc-bad-access

我是C ++的新手,只是在这段代码中找到我做错了什么:

我的C ++类看起来像这样:

#include <boost/thread/thread.hpp>

using namespace std;

struct AClass::AClassImpl
{
    boost::thread m_thread;
};

AClass::AClass(): pimpl (new AClass::AClassImpl) {}

AClass::~AClass() { delete pimpl; }

void AClass::start()
{
    cout << PREFIX << "main() : creating thread, " << endl;
    pimpl->m_thread = boost::thread(boost::bind(&AClass::process, this));
}

void AClass::stop()
{
    pimpl->m_thread.join();
}

void AClass::process()
{
    cout << PREFIX << "Hello World! Thread ID, " << endl;
    boost::this_thread::sleep(boost::posix_time::milliseconds(1000));
    return;
}

在XCode中,我还编写了一个Objective-C测试用例,用这种方法测试AClass:

- (void) testStart
{
    tested->start();
    tested->stop();
}

问题是我在

上获得了EXC_BAD_ACCESS
pimpl->m_thread.join(); 
在停止方法中

行。

这是我的头文件:

class AClass {
public:
    AClass ();
    ~AClass();
    void start();
    void stop();

private:
    struct AClassImpl; //fwd declaration of internal struct
    AClassImpl * pimpl; //opaque pointer
    void process();
};

有人能给我一些关于我在这里做错的提示吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我已使用

测试了您的程序
int main()
{
  AClass tested;
  tested.start();
  tested.stop();
  return 0;
}

一切都在干线上工作。输出是

main() : creating thread, 
Hello World! Thread ID, 

我不知道你是怎么测试它的。你可以试试我的主?

您使用的是哪个版本的Boost,哪个编译器以及在哪个平台上使用?