我打算编写一个std::cin
在线程中读取并在输入内容时调用回调的类。回调是一个boost::function
. 如果我只有 ,则代码运行std::getline (std::cin, command);
,但如果我添加行,则会因“访问冲突”而崩溃if(this->m_receiveHandler != NULL)
。我真的找不到发生了什么,所以我将问题简化为以下测试。
问题不是完全确定的,有时我可以输入一两行,有时它会立即崩溃。程序输出的最后一件事始终是“访问接收器处理程序”。
class InputReader
{
private:
boost::function<void (const char*, unsigned int) > m_receiveHandler;
boost::thread m_receiveThread;
void receiveLoop(void)
{
while(true)
{
std::string command;
std::getline (std::cin, command);
std::cout << "access receiver handler" << std::flush;
if(this->m_receiveHandler != NULL)
{
}
}
}
public:
InputReader()
{
m_receiveThread = boost::thread(boost::bind(&InputReader::receiveLoop, this));
}
};
TEST(InputReaderTest, WaitInfinite)
{
InputReader reader;
while (true) {};
}
你觉得这段代码有什么问题吗?
编辑:我在带有 Boost 1.49 的 Suse Linux 上使用 GCC 4.3.2 进行编译。