Compartir a través de


_cwait

Espera hasta que otro proceso finaliza.

Nota importanteImportante

Esta API no se puede utilizar en las aplicaciones que se ejecutan en Windows en tiempo de ejecución.Para obtener más información, vea Funciones CRT no compatibles con /ZW.

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

Parámetros

  • termstat
    Puntero a un búfer donde el código de salida del proceso especificado se almacenará, o NULL.

  • procHandle
    El identificador al proceso a esperar (es decir, el proceso que tiene que finalizar antes de que _cwait pueda cambiar).

  • action
    NULL: Omitido por aplicaciones para el sistema operativo Windows; para otras aplicaciones: código de acción a realizar en procHandle.

Valor devuelto

Cuando el proceso especificado se haya completado correctamente, devuelve el identificador de proceso especificado y establece termstat a código de resultado devuelto por el proceso especificado.De lo contrario, devuelve – 1 y establece errno como sigue.

Valor

Descripción

ECHILD

Ningún proceso especificado existe, procHandle no es válido, o la llamada a GetExitCodeProcess o WaitForSingleObject API no.

EINVAL

action no es válido.

Para obtener más información sobre éstos y otros códigos de retorno, vea errno, _doserrno, _sys_errlist, y _sys_nerr.

Comentarios

La función de _cwait espera la finalización del identificador del proceso especificado proporcionado por procHandle.El valor de procHandle que se pasa a _cwait debe ser el valor devuelto por la llamada a la función de _spawn que creó el proceso especificado.Si el identificador de proceso finaliza antes de que se llame a _cwait, _cwait vuelve inmediatamente._cwait se puede usar en cualquier proceso para esperar cualquier otro proceso conocido que un identificador válido (procHandle) existe.

puntos de termstat a un búfer donde el código de retorno de proceso especificado se almacenará.El valor de termstat indica si el proceso especificado finalizó normalmente llamando a ExitProcess API.ExitProcess se llama internamente si el proceso especificado llama exit o _exit, cambia de main, o alcanza el final de main.Para obtener más información sobre el valor que se devuelve de con termstat, vea GetExitCodeProcess.Si _cwait se realiza mediante un valor NULL para termstat, el código de retorno de proceso especificado no se almacena.

El parámetro de action es omitido por el sistema operativo Windows porque las relaciones de elementos primario- elemento secundario no se implementan en estos entornos.

A menos que procHandle sea -1 o -2 (identificadores a la actual procesan o subproceso), el identificador se cierra.Por consiguiente, en esta situación, no utilice el identificador devuelto.

Requisitos

Rutina

Encabezado necesario

Encabezado opcional

_cwait

<process.h>

<errno.h>

Para obtener más información de compatibilidad, vea Compatibilidad.

Ejemplo

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

Equivalente en .NET Framework

System::Diagnostics::Process::WaitForExit

Vea también

Referencia

Proceso y control ambiental

_spawn, funciones de _wspawn