我是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_ACCESSpimpl->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();
};
有人能给我一些关于我在这里做错的提示吗?
谢谢!
答案 0 :(得分:0)
我已使用
测试了您的程序int main()
{
AClass tested;
tested.start();
tested.stop();
return 0;
}
一切都在干线上工作。输出是
main() : creating thread,
Hello World! Thread ID,
我不知道你是怎么测试它的。你可以试试我的主?
您使用的是哪个版本的Boost,哪个编译器以及在哪个平台上使用?