Я новичок в 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();
};
Кто-нибудь может дать мне подсказку о том, что я здесь делаю неправильно?
Спасибо!
Я проверил вашу программу, используя
int main()
{
AClass tested;
tested.start();
tested.stop();
return 0;
}
и все работает на багажнике. Выход
main() : creating thread,
Hello World! Thread ID,
Я не знаю, как ты это тестируешь. Не могли бы вы попробовать с моим основным?
Какую версию Boost вы используете, с каким компилятором и на какой платформе?
Других решений пока нет …