EXC ПЛОХОЙ ДОСТУП в boost :: thread join

Я новичок в 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

Решение

Я проверил вашу программу, используя

int main()
{
AClass tested;
tested.start();
tested.stop();
return 0;
}

и все работает на багажнике. Выход

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

Я не знаю, как ты это тестируешь. Не могли бы вы попробовать с моим основным?

Какую версию Boost вы используете, с каким компилятором и на какой платформе?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]