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
}
}