Compartir a través de


_cwait

Espera hasta que finaliza otro proceso.

Importante

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

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

Parámetros

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

  • procHandle
    Identificador del proceso al que se va a esperar (es decir, el proceso que tiene que finalizar antes de que _cwait pueda devolver un valor).

  • action
    NULL: las aplicaciones el sistema operativo Windows lo omiten; en el caso de otras aplicaciones: código de acción que se va a realizar en procHandle.

Valor devuelto

Cuando el proceso especificado finaliza correctamente, devuelve el identificador del proceso especificado y establece termstat en el código de resultado devuelto por el proceso especificado. De lo contrario, devuelve –1 y establece errno como se indica a continuación.

Valor

Descripción

ECHILD

No existe ningún proceso especificado, procHandle no es válido o la llamada a la API GetExitCodeProcess o WaitForSingleObject ha producido un error.

EINVAL

action no es válido.

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

Comentarios

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

termstat señala a un búfer en el que se almacenará el código devuelto del proceso especificado. El valor de termstat indica si el proceso especificado terminó con normalidad mediante una llamada a la API de Windows ExitProcess. Se llama internamente a ExitProcess si el proceso especificado llama a exit o _exit, vuelve desde main o llega al final de main. Para más información sobre el valor que se devuelve a través de termstat, vea GetExitCodeProcess. Si se llama a _cwait con un valor NULL para termstat, el código de retorno del proceso especificado no se almacena.

El sistema operativo Windows omite el parámetro action, porque en estos entornos no están implementadas las relaciones elemento primario-elemento secundario.

A menos que procHandle sea -1 o -2 (identificadores del proceso o subproceso actual), el identificador se cierra. Por consiguiente, en esta situación, no se debe usar 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

Control de proceso y de entorno

_spawn, _wspawn (Funciones)