_cwait

다른 프로세스가 종료될 때까지 기다립니다.

Important

이 API는 Windows 런타임에서 실행되는 애플리케이션에서 사용할 수 없습니다. 자세한 내용은 유니버설 Windows 플랫폼 앱에서 지원되지 않는 CRT 함수를 참조하세요.

구문

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

매개 변수

termstat
지정된 프로세스의 결과 코드가 저장되는 버퍼에 대한 포인터입니다 NULL.

procHandle
대기 중인 프로세스에 대한 핸들입니다(즉, _cwait를 반환하기 전에 종료되어야 하는 프로세스).

action
NULL: Windows 운영 체제 애플리케이션에서 무시됩니다. 다른 애플리케이션의 경우: 수행할 작업 코드입니다 procHandle.

반환 값

지정된 프로세스가 성공적으로 완료되면 지정된 프로세스의 핸들을 반환하고 termstat를 지정한 프로세스에서 반환한 결과 코드로 설정합니다. 그렇지 않으면 -1을 반환하고 다음과 같이 설정합니다 errno .

errno 설명
ECHILD 지정한 프로세스가 없거나, procHandle 유효하지 않거나, API WaitForSingleObject 에 대한 호출이 GetExitCodeProcess 실패했습니다.
EINVAL action이 잘못되었습니다.

이러한 코드 및 기타 반환 코드에 대한 자세한 내용은 , _doserrno_sys_nerr_sys_errlist를 참조하세요.errno

설명

_cwait 함수는 procHandle에서 제공하는 지정된 프로세스의 프로세스 ID가 종료될 때까지 기다립니다. 전달되는 _cwaitprocHandle 은 지정된 프로세스를 만든 함수에 대한 호출 _spawn 에서 반환되는 값이어야 합니다. _cwait가 호출되기 전에 프로세스 ID가 종료되면 _cwait가 즉시 반환됩니다. _cwait는 모든 프로세스에서 유효한 핸들(procHandle)이 있는 다른 모든 알려진 프로세스를 기다리는 데 사용할 수 있습니다.

termstat는 지정된 프로세스의 반환 코드가 저장될 버퍼를 가리킵니다. 값 termstat 은 지정된 프로세스가 Windows ExitProcess API를 호출하여 정상적으로 종료되었는지 여부를 나타냅니다. 지정된 프로세스가 ExitProcess 또는 exit를 호출하거나, _exit에서 반환되거나, main의 끝에 도달한 경우 main가 내부적으로 호출됩니다. 다시 termstat전달되는 값에 대한 자세한 내용은 다음을 참조하세요 GetExitCodeProcess. 값을 termstat사용하여 NULL 호출되는 경우 _cwait 지정된 프로세스의 반환 코드가 저장되지 않습니다.

action 부모-자식 관계는 이러한 환경에서 구현되지 않으므로 Windows 운영 체제에서 매개 변수를 무시합니다.

procHandle이 -1 또는 -2(현재 프로세스 또는 스레드에 대한 핸들)가 아닌 경우 핸들이 닫힙니다. 이 경우 반환된 핸들을 사용하지 마세요.

기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT의 전역 상태를 참조하세요.

요구 사항

루틴에서 반환된 값 필수 헤더 선택적 헤더
_cwait <process.h> <errno.h>

호환성에 대한 자세한 내용은 호환성을 참조하세요.

예시

// 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]);
    }
}

출력 순서는 실행마다 다릅니다.

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.

참고 항목

프로세스 및 환경 제어
_spawn, _wspawn 함수