C++ 一段时间内的PPL任务调用C++;
我正在进行交叉远程工作测试,我使用Cpp Rest卡萨布兰卡。 我需要解析一个XML文件,所以我在google上找到了这个XML解析器(它似乎是最快的解析器) 然而,我需要改变它,因为每次我有一个潜在的阻塞i/O操作(比如读取文件),我都必须创建一个任务。 因此,我尝试从中转换(只是一段小代码) 对这样的事情:C++ 一段时间内的PPL任务调用C++;,c++,xml,visual-studio-2013,ppl,cpprest-sdk,C++,Xml,Visual Studio 2013,Ppl,Cpprest Sdk,我正在进行交叉远程工作测试,我使用Cpp Rest卡萨布兰卡。 我需要解析一个XML文件,所以我在google上找到了这个XML解析器(它似乎是最快的解析器) 然而,我需要改变它,因为每次我有一个潜在的阻塞i/O操作(比如读取文件),我都必须创建一个任务。 因此,我尝试从中转换(只是一段小代码) 对这样的事情: task<HRESULT> ReadNodeXML([&]() { return pReader->Read(&nodeType); });
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;
task ReadNodeXML([&]()
{
返回预订单->读取(&nodeType);
});
//读取,直到没有更多节点为止
而(S_OK==(hr=ReadNodeXML.get())
//而(S_OK==(hr=pReader->Read(&nodeType)))
{
开关(节点类型)
{
案例XmlNodeType\u XmlDeclaration:
wprintf(L“XmlDeclaration”);
如果(S_OK!=pReader->MoveToNextAttribute())
打破
我实际上在研究PPL和卡萨布兰卡,但我没有找到很多例子。
当我第一次调试代码时,ReadNodeXML.get()跳转到ReadNodeXML任务代码,但只有一次,因此我无法读取其他节点和它的循环。
有人能解释一下什么是错误的,因为在阅读了大量的文档之后,我怀疑以一种递归的方式完全重写了代码
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;