_cwait
Aguarda até que outro processo é encerrado.
intptr_t _cwait(
int *termstat,
intptr_t procHandle,
int action
);
Parâmetros
termstat
Ponteiro para um buffer onde o código de resultado do processo especificado será armazenado ou nulo.procHandle
O identificador para o processo para aguardar (o processo que deve terminar antes de _cwait pode retornar).action
NULO: 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 foi concluída com êxito, retorna o identificador do processo especificado e define termstat o código de resultado retornado pelo processo especificado. Caso contrário, retorna – 1 e define errno sistema autônomo a seguir.
Valor |
Descrição |
---|---|
ECHILD |
Nenhum processo especificado existe, procHandle é inválido ou a telefonar para o GetExitCodeProcess or WaitForSingleObject Falha na API. |
EINVAL |
action é inválido. |
Para obter mais informações sobre esses e outros códigos de retorno, consulte _doserrno, errno, _sys_errlist e _sys_nerr.
Comentários
The _cwait função aguarda a finalização de ID do processo do processo especificado fornecido pelo procHandle. O valor de procHandle passado para _cwait deve ser o valor retornado pela telefonar para o _spawn função que criou o processo especificado.Se a ID do processo termina antes de _cwait é chamado, _cwait retorna imediatamente. _cwait pode ser usado por qualquer processo para aguardar qualquer Outros processo conhecido para o qual um identificador válido (procHandle) existe.
termstat aponta para um buffer onde o código de retorno do processo especificado será armazenado.O valor de termstat Indica se o processo especificado finalizado normalmente chamando o Windows NT ExitProcess API.ExitProcess é chamado internamente se chama o processo especificado exit ou _exit, retorna a partir de main, ou chega ao participante do main. Para obter mais informações sobre o valor transmitido através de termstat, consulte GetExitCodeProcess. If _cwait é chamado com um valor nulo para termstat, o código de retorno do processo especificado não está armazenado.
The action parâmetro será ignorado pelo sistema operacional Windows, pois relações pai-filho não são implementadas nesses ambientes.
Observe que, a menos que procHandle é -1 ou -2 (tratada ao processo corrente ou segmento), o identificador será fechado. Portanto, nesse caso, não use o identificador retornado.
Requisitos
Rotina |
Cabeçalho necessário |
Cabeçalho opcional |
---|---|---|
_cwait |
<processo.h> |
<errno.h> |
Para obter mais informações de compatibilidade, consulte Compatibilidade na introdução.
Exemplo
// crt_cwait.c
// compile with: /c
// This program launches several processes and waits
// for a specified process to finish.
//
#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() % (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;
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 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.
Equivalente do NET Framework
sistema::Diagnóstico::processo::WaitForExit