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 中,我还编写了一个 Objective-C 测试用例,用这种方法测试 AClass:

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

问题是我在

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();
};

谁能给我一个提示我在这里做错了什么?

谢谢!

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 回答