_cwait
Attende fino a un altro processo.
Importante |
---|
Questa API non può essere utilizzato nelle applicazioni eseguite in Windows Runtime.Per ulteriori informazioni, vedere Funzioni CRT non supportate con /ZW. |
intptr_t _cwait(
int *termstat,
intptr_t procHandle,
int action
);
Parametri
termstat
Puntatore a un buffer in cui il codice risultato del processo specificato verrà archiviato, o NULL.procHandle
Handle del processo in attesa su (ovvero il processo che deve terminare prima di _cwait restituzione).action
NULL: Ignorato dalle applicazioni del sistema operativo Windows, per altre applicazioni: codice dell'azione da eseguire su procHandle.
Valore restituito
Quando il processo specificato ha completato correttamente, restituisce l'handle del processo specificato e imposta termstat al codice di risultato restituito dal processo specificato.In caso contrario, restituisce a 1 e set errno come segue.
Valore |
Descrizione |
---|---|
ECHILD |
Alcun processo specificato esiste, procHandle non è valido, o la chiamata a GetExitCodeProcess o a WaitForSingleObject API non superato. |
EINVAL |
action non è valido. |
Per ulteriori informazioni su questi e altri codici restituiti, vedere errno, _doserrno, _sys_errlist e _sys_nerr.
Note
Funzione attende che _cwait della chiusura dell'ID del processo specificato fornito da procHandle.Il valore di procHandle passato a _cwait deve essere il valore restituito dalla chiamata alla funzione di _spawn che ha creato il processo specificato.Se l'id processo termina prima di _cwait si chiama, restituzione di _cwait immediatamente._cwait può essere utilizzato da qualsiasi processo per attendere qualsiasi altro processo noto per il quale un handle valido ()procHandleesistenti.
punti ditermstat a un buffer in cui il codice restituito del processo specificato verrà archiviato.Il valore di termstat indica se il processo specificato da in genere chiamando ExitProcess API.ExitProcess viene chiamato internamente se il processo specificato chiama exit o _exit, restituzioni da main, o raggiunge la fine di main.Per ulteriori informazioni sul valore passato a termstat, vedere GetExitCodeProcess.Se _cwait viene chiamato utilizzando un valore null per termstat, il codice restituito del processo specificato non viene archiviato.
Il parametro di action viene ignorato dal sistema operativo Windows poiché le relazioni padre-figlio non vengono distribuite in questi ambienti.
A meno che procHandle sia -1 o -2 (handle a processo corrente o thread), handle verranno chiuse.Pertanto, in questa situazione, non utilizzare gli handle restituiti.
Requisiti
Routine |
Intestazione obbligatoria |
Intestazione facoltativa |
---|---|---|
_cwait |
<process.h> |
<errno.h> |
Per ulteriori informazioni di compatibilità, vedere Compatibilità.
Esempio
// 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 .NET Framework
System::Diagnostics::Process::WaitForExit