1

私は 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 では、このメソッドで AClass をテストする Objective-C テスト ケースも作成しました。

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

問題は、私が EXC_BAD_ACCESS を取得することです

pimpl->m_thread.join(); 

stop メソッドの行。

これは私のヘッダーファイルです:

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

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

ここで私が間違っていることについて誰かが私にヒントを与えることができますか?

ありがとう!

4

1 に答える 1

0

私はあなたのプログラムを使用してテストしました

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

すべてがトランクで動作しています。出力は

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

どのようにテストしているのかわかりません。私のメインで試してみませんか?

Boost のどのバージョン、どのコンパイラ、どのプラットフォームを使用していますか?

于 2012-12-11T18:41:01.140 に答える