Я работаю над кроссовером удаленного рабочего теста и я использую Cpp Rest Casablanca.
Мне нужно разобрать файл XML, поэтому я нашел в Google этот парсер XML (кажется, самый быстрый парсер)
Однако мне нужно изменить его, потому что каждый раз, когда у меня есть потенциально блокирующая операция ввода / вывода (например, чтение файла), я должен создать задачу.
Поэтому я пытаюсь преобразовать из этого (просто небольшой кусок кода)
//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 и Касабланку, но я не нашел много примеров.
когда я отлаживаю код в первый раз, ReadNodeXML.get () переходит к коду задачи ReadNodeXML, но только один раз, поэтому я не могу читать другие узлы, и он зацикливается.
Может кто-нибудь объяснить, что не так, потому что после прочтения большого количества документов я подозреваю, что полностью переписать код каким-то рекурсивным способом.
Задача ещё не решена.
Других решений пока нет …