Compartilhar via


_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

Consulte também

Referência

Processo e ambiente de controle

_spawn, _wspawn funções