Среда: Visual Studio 2017, Windows 10 вер.1709. Режим компиляции: release.
Когда я звоню:
accelerator_view acc_view = accelerator().default_view;
, возникает исключение (см. Ссылку на рисунок ниже), но впоследствии код работает нормально.Но когда исполняемый процесс завершается, и я вызываю:
::GetExitCodeProcess(hChildProcess, &retVal);
из вызывающего процесса, вместо возврата 0, он возвращает значение мусора в retVal.Копая исходный код, проблема, кажется, в следующем фрагменте кода (SchedulerBase.cpp, строка 149)
// Auto-reset event that is not signalled initially
m_hThrottlingEvent = platform::__CreateAutoResetEvent();
// Use a trampoline for UMS
if (!RegisterWaitForSingleObject(&m_hThrottlingWait, m_hThrottlingEvent, SchedulerBase::ThrottlerTrampoline, this, INFINITE, WT_EXECUTEDEFAULT))
{
throw scheduler_resource_allocation_error(HRESULT_FROM_WIN32(GetLastError()));
}
Я думаю, что это не в моих руках, чтобы исправить это, потому что код выше находится внутри MFC,Тот же код хорошо работает при компиляции с Visual Studio 2013. Обратитесь к рисунку, прикрепленному к стеку, показывающему возбужденное исключение (и перехваченное внутри), когда я вызываю
accelerator_view acc_view = accelerator().default_view;
Вопрос: как очиститьAMP перед выходом и получение правильного результата при вызове GetExitCodeProcess ()?
Вот рисунок: ![stack calling accelerator().default_view](https://i.stack.imgur.com/W8IG1.png)