1

我正在进行交叉远程工作测试,我使用 Cpp Rest Casablanca。我需要解析一个 XML 文件,所以我在 google 上找到了这个 xml 解析器(它似乎是最快的解析器)

https://code.msdn.microsoft.com/XmlLite-XML-node-writer-4472022a/sourcecode?fileId=51211&pathId=2033671260

但是我需要更改它,因为每次我有一个潜在的阻塞 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 任务代码但只有一次,所以我无法读取其他节点并且它循环。有人可以解释什么是错的,因为在阅读了大量文档后,我怀疑以一种递归方式完全重写代码。

4

0 回答 0