_cwait
Espera hasta que otro proceso finaliza.
Importante |
---|
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