c – 调用Boost JSON解析器永远不会返回
发布时间:2020-12-16 07:31:13 所属栏目:百科 来源:网络整理
导读:我在 Linux上运行的基于QT的单线程控制台应用程序使用Boost解析JSON字符串,除了接收非常大的JSON块外,它通常工作正常.我有一块大小约为160kb的有效JSON(!),当我尝试解析它时,对Boost的JSON解析器的调用永远不会返回.我已经离开了相当长的一段时间.如果我随
我在
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 } } 解决方法
首先,我同意以上两条评论:尽量减少您的计划.
其次,我会尝试检查Qt(stl,boost,这个特定版本的任何东西)是否可以处理大的字符串.确保您的解析器获取整个字符串. 第三,我会使用ostringstream而不是sstream. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |