我正在进行交叉远程工作测试,我使用 Cpp Rest Casablanca。我需要解析一个 XML 文件,所以我在 google 上找到了这个 xml 解析器(它似乎是最快的解析器)
但是我需要更改它,因为每次我有一个潜在的阻塞 I/O 操作(例如读取文件)我都必须创建一个任务。所以我尝试从这个转换(只是一小段代码)
//read until there are no more nodes
while (S_OK == (hr = pReader->Read(&nodeType)))
{
switch (nodeType)
{
case XmlNodeType_XmlDeclaration:
wprintf(L"XmlDeclaration\n");
if (S_OK != pReader->MoveToNextAttribute())
break;
像这样:
task<HRESULT> ReadNodeXML([&]()
{
return pReader->Read(&nodeType);
});
//read until there are no more nodes
while (S_OK == (hr = ReadNodeXML.get()))
//while (S_OK == (hr = pReader->Read(&nodeType)))
{
switch (nodeType)
{
case XmlNodeType_XmlDeclaration:
wprintf(L"XmlDeclaration\n");
if (S_OK != pReader->MoveToNextAttribute())
break;
我实际上正在研究 PPL 和 casablanca,但我没有找到很多例子。当我第一次调试代码时 ReadNodeXML.get() 跳转到 ReadNodeXML 任务代码但只有一次,所以我无法读取其他节点并且它循环。有人可以解释什么是错的,因为在阅读了大量文档后,我怀疑以一种递归方式完全重写代码。