1
我是新的C++,只是找到我在这段代码做错了:中的boost ::线程EXC BAD ACCESS加入
我的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我也写一个测试ACLASS用这种方法Objective-C的测试案例:
- (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();
};
任何人都可以给我,我做错了什么在这里暗示?
谢谢!
使用武器。此外,您忘了让您的课程不可复制或忘记实施正确的复制和分配。我相信是造成问题的原因(复制)。 – 2012-11-29 20:28:33
感谢您的回复。也许我只是愚蠢的,但我没有看到我在做一个副本的程序中的任何地方。我也尝试调试它,当我在停止功能时,线程似乎很好,据我所见.. – pascalc
“被测试”对象在哪里被创建? –