Udostępnij za pośrednictwem


_cwait

Czeka na zakończenie innego procesu.

Ważne

Tego interfejsu API nie można używać w aplikacjach wykonywanych w środowisko wykonawcze systemu Windows. Aby uzyskać więcej informacji, zobacz Funkcje CRT nieobsługiwane w aplikacjach platforma uniwersalna systemu Windows.

Składnia

intptr_t _cwait(
   int *termstat,
   intptr_t procHandle,
   int action
);

Parametry

termstat
Wskaźnik do buforu, w którym będzie przechowywany kod wyniku określonego procesu lub NULL.

procHandle
Dojście do procesu oczekiwania (oznacza to, że proces, który musi zakończyć się przed _cwait powrotem).

action
NULL: ignorowane przez aplikacje systemu operacyjnego Windows; dla innych aplikacji: kod akcji do wykonania w systemie procHandle.

Wartość zwracana

Po pomyślnym zakończeniu określonego procesu zwraca uchwyt określonego procesu i ustawia termstat go na kod wynikowy zwracany przez określony proces. W przeciwnym razie zwraca wartość -1 i zestawy errno w następujący sposób.

errno wartość opis
ECHILD Nie istnieje określony proces, procHandle jest nieprawidłowy lub wywołanie interfejsu GetExitCodeProcess WaitForSingleObject API nie powiodło się.
EINVAL action jest nieprawidłowy.

Aby uzyskać więcej informacji na temat tych i innych kodów powrotnych, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.

Uwagi

Funkcja _cwait czeka na zakończenie procesu identyfikatora określonego procesu dostarczonego przez procHandleprogram . Wartość przekazanego procHandle _cwait elementu powinna być wartością zwracaną przez wywołanie _spawn funkcji, która utworzyła określony proces. Jeśli identyfikator procesu zakończy się przed _cwait wywołaniem, _cwait zwraca natychmiast. _cwait Może służyć dowolny proces do oczekiwania na dowolny inny znany proces, dla którego istnieje prawidłowy uchwyt (procHandle).

termstat wskazuje bufor, w którym będzie przechowywany kod powrotny określonego procesu. Wartość parametru termstat wskazuje, czy określony proces zakończył się normalnie przez wywołanie interfejsu API systemu Windows ExitProcess . ExitProcess jest wywoływany wewnętrznie, jeśli określone wywołania exit procesu lub _exit, zwraca z main, lub osiąga koniec main. Aby uzyskać więcej informacji na temat wartości przekazanej z powrotem przez termstatprogram , zobacz GetExitCodeProcess. Jeśli _cwait jest wywoływana NULL przy użyciu wartości dla termstat, kod zwrotny określonego procesu nie jest przechowywany.

Parametr action jest ignorowany przez system operacyjny Windows, ponieważ relacje nadrzędny-podrzędny nie są implementowane w tych środowiskach.

Jeśli nie procHandle ma wartości -1 lub -2 (dojścia do bieżącego procesu lub wątku), dojście zostanie zamknięte. W takiej sytuacji nie używaj zwróconego uchwytu.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Wymagania

Procedura Wymagany nagłówek Opcjonalny nagłówek
_cwait <process.h> <errno.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

// crt_cwait.c
// compile with: /c
// This program launches several processes and waits
// for a specified process to finish.

#define _CRT_RAND_S

#include <windows.h>
#include <process.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

// Macro to get a random integer within a specified range
#define getrandom( min, max ) (( (rand_s (&number), number) % (int)((( max ) + 1 ) - ( min ))) + ( min ))

struct PROCESS
{
    intptr_t hProcess;
    char    name[40];
} process[4] = { { 0, "Ann" }, { 0, "Beth" }, { 0, "Carl" }, { 0, "Dave" } };

int main(int argc, char* argv[])
{
    int termstat, c;
    unsigned int number;

    srand((unsigned)time(NULL));    // Seed randomizer

    // If no arguments, this is the calling process
    if (argc == 1)
    {
        // Spawn processes in numeric order
        for (c = 0; c < 4; c++) {
            _flushall();
            process[c].hProcess = _spawnl(_P_NOWAIT, argv[0], argv[0],
                process[c].name, NULL);
        }

        // Wait for randomly specified process, and respond when done
        c = getrandom(0, 3);
        printf("Come here, %s.\n", process[c].name);
        _cwait(&termstat, process[c].hProcess, _WAIT_CHILD);
        printf("Thank you, %s.\n", process[c].name);

    }
    // If there are arguments, this must be a spawned process
    else
    {
        // Delay for a period that's determined by process number
        Sleep((argv[1][0] - 'A' + 1) * 1000L);
        printf("Hi, Dad. It's %s.\n", argv[1]);
    }
}

Kolejność danych wyjściowych różni się od uruchomienia do uruchomienia.

Hi, Dad. It's Ann.
Come here, Ann.
Thank you, Ann.
Hi, Dad. It's Beth.
Hi, Dad. It's Carl.
Hi, Dad. It's Dave.

Zobacz też

Kontrola procesu i środowiska
_spawn, _wspawn funkcje