получить код выхода всегда возвращает 1 - PullRequest
0 голосов
/ 20 ноября 2018

Я работаю над проектом, который включает потоки и процессы.Я открываю многопоточность и для каждого потока открываю процесс, который запускает исполняемый файл.Если программа завершает работу с возвращенным значением, отличным от 0, то происходит сбой, и возвращаемое значение должно быть напечатано.чтобы получить возвращаемое значение, я использую функцию WIN API GetExitCodeProcess (), моя проблема в том, что эта функция всегда возвращает значение 1, даже если программа должна быть аварийно завершена, но почему?вот мой подходящий код:

static DWORD WINAPI RunningTests(test_s *test)
{
    PROCESS_INFORMATION procinfo;
    DWORD waitcode;
    DWORD exitcode;
    int status = 0, crashed = 0;
    char cmdLineString[MAX_NUMBER_OF_CHARS_IN_CMD_LINE]="";
    char *cmdLineStringPtr = cmdLineString;

    (test)->isCrashed = 0;
    CreateCmdLine((*test).testExePath, &cmdLineStringPtr);
    status = CreateProcessSimple(_T(cmdLineString), &procinfo);
    if (status == -1)
    {
        return 1;
    }
    waitcode = WaitForSingleObject(procinfo.hProcess, 
    TIME_UNTIL_TIMED_OUT_IN_MILLISEC);
    if (waitcode == WAIT_TIMEOUT) /* Process is still alive */
    {
        strcpy((*test).status, "Timed Out");
        CloseHandle(procinfo.hProcess);
        CloseHandle(procinfo.hThread);
        return 0;
    }
   crashed = GetExitCodeProcess(procinfo.hProcess, &exitcode);
   if (crashed == 0)  /* Process is crashed */
   {
        strcpy((*test).status, "Crashed");
        (*test).isCrashed = 1;
        (*test).returnedCrashedValue = exitcode;
        CloseHandle(procinfo.hProcess);
        CloseHandle(procinfo.hThread);
        return 0;
    }
    CloseHandle(procinfo.hProcess);
    CloseHandle(procinfo.hThread);
    return CompareFiles(&test);              
}

1 Ответ

0 голосов
/ 20 ноября 2018

Вы должны смотреть на код выхода, не сбой;

Возвращаемое значение

Если функция завершается успешно, возвращаемое значение отлично от нуля.

Если функцияне удается, возвращаемое значение равно нулю.Чтобы получить расширенную информацию об ошибке, вызовите GetLastError.

...