Как написать аналог posix waitpid () для windows? - PullRequest
2 голосов
/ 30 марта 2011

Я хочу перенести мой код Linux на Windows.Я не хочу использовать Cygwin или Mingw.Я хотел бы сделать это через WinApi.Так кто же может помочь мне написать аналог waitpid () под windows?

Ответы [ 2 ]

5 голосов
/ 30 марта 2011

CreateProcess способ создания нового процесса. Его вывод - структура PROCESS_INFORMATION. WaitForSingleObject может дождаться окончания процесса.

Вот пример из MSDN библиотеки (GetExitCodeProcess было добавлено.):

#include <windows.h>
#include <stdio.h>
#include <tchar.h>

void _tmain( int argc, TCHAR *argv[] )
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    DWORD exit_code = 0;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    if( argc != 2 )
    {
        printf("Usage: %s [cmdline]\n", argv[0]);
        return;
    }

    // Start the child process. 
    if( !CreateProcess( NULL,   // No module name (use command line)
        argv[1],        // Command line
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        0,              // No creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi )           // Pointer to PROCESS_INFORMATION structure
    ) 
    {
        printf( "CreateProcess failed (%d)\n", GetLastError() );
        return;
    }

    // Wait until child process exits.
    WaitForSingleObject( pi.hProcess, INFINITE );

    // Get exit code
    GetExitCodeProcess( pi.hProcess, &exit_code );

    // Close process and thread handles. 
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
}
3 голосов
/ 30 марта 2011

Вы можете использовать WaitForSingleObject, если у вас есть дескриптор процесса. Вы должны были получить это при создании дочернего процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...