我在 Linux 上运行的基于 QT 的单线程控制台应用程序使用 Boost 解析 JSON 字符串,并且它正常工作,除非接收到非常大的 JSON 块。我有一个大小约为 160kb 的有效 JSON(!),当我尝试解析它时,对 Boost 的 JSON 解析器的调用永远不会返回。我已经离开了很长一段时间。如果我随后中断使用调试器,我的应用程序就会闲置在它的消息循环中,就好像什么都没发生一样。该调用不会引发异常。除了它的大尺寸之外,JSON 没有什么值得注意的——它格式正确并且完全由 ASCII 字符组成。
执行如何简单地“放弃”并返回 QT 消息循环?
void IncomingRequestHandler::OnRequest(const QString& message)
{
try
{
std::stringstream ss;
ss << message.toStdString();
boost::property_tree::ptree requestObject;
cout << "Before read_json" << endl; // Gets here
boost::property_tree::json_parser::read_json(ss, requestObject);
cout << "After read_json" << endl; // Never gets here
// ... Some other code ...
}
catch (const boost::property_tree::json_parser::json_parser_error& e)
{
cout << "Invalid JSON" << endl; // Never gets here
}
catch (const std::runtime_error& e)
{
cout << "Invalid JSON" << endl; // Never gets here
}
catch (...)
{
cout << "Invalid JSON" << endl; // Never gets here
}
}