_cwait
Espera até que outro processo termina.
Importante |
---|
Este API não pode ser usado em aplicativos executados em Tempo de Execução do Windows.Para obter mais informações, consulte Funções de CRT não suportadas com /ZW. |
intptr_t _cwait( int *termstat, intptr_t procHandle, int action );
Parâmetros
termstat
Ponteiro para um buffer onde o código do resultado do processo especificado está armazenado., ou NULLprocHandle
O identificador para o processo para esperar sobre (isto é, o processo que tem que termine antes que _cwait pode retornar).action
NULL: Ignorado por aplicativos do sistema operacional Windows; para outros aplicativos: código de ação para executar em procHandle.
Valor de retorno
Quando o processo especificado for concluída com êxito, retorna o identificador do processo especificado e defina termstat o código do resultado retornado pelo processo especificado.Caso contrário, retornará 1 – e define errno como segue.
Valor |
Descrição |
---|---|
ECHILD |
Nenhum processo especificado existir, procHandle é inválido, ou a chamada à API WaitForSingleObjectGetExitCodeProcess ou falharam. |
EINVAL |
action é inválida. |
Para obter mais informações sobre esses e outros códigos de retorno, consulte errno, _doserrno, _sys_errlist e _sys_nerr.
Comentários
As espera da função de _cwait para a finalização de identificação de processo do processo especificado que é fornecido por procHandle.O valor de procHandle que é passado para _cwait deve ser o valor retornado pela chamada à função de _spawn que criou o processo especificado.Se a identificação de processo termina antes que _cwait seja chamado, _cwait retorna imediatamente._cwait pode ser usado por qualquer processo para esperar qualquer outro processo conhecido para que um identificador válido ()procHandleexistir.
pontos determstat a um buffer onde o código de retorno do processo especificado está armazenado.O valor de termstat indica se o processo especificado foi finalizado normalmente ExitProcess chamando API.ExitProcess é chamado internamente se o processo especificado chama exit ou _exit, retorna de main, ou atingir o final de main.Para obter mais informações sobre o valor que é passado por com termstat, consulte GetExitCodeProcess.Se _cwait é chamado usando um valor NULO para termstat, o código de retorno do processo especificado não está armazenado.
O parâmetro de action é ignorado pelo sistema operacional Windows porque as relações pai-filho não são implementadas nestes ambientes.
A menos que procHandle é -1 ou -2 (identificadores para o processo ou para o segmento atual), o identificador será fechada.Como consequência, nesta situação, não use a alça retornado.
Requisitos
Rotina |
Cabeçalho necessário |
Cabeçalho opcional |
---|---|---|
_cwait |
<process.h> |
<errno.h> |
Para mais informações, consulte Compatibilidadede compatibilidade.
Exemplo
// 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
{
int nPid;
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].nPid = _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].nPid, _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] );
}
}
Equivalência do .NET Framework
System::Diagnostics::Process::WaitForExit