_cwait

Espera até que outro processo termina.

Observação importanteImportante

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 NULL

  • procHandle
    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

Consulte também

Referência

Processo e controle do ambiente

_spawn, _wspawn funções