_cwait

Attende fino a un altro processo.

Nota importanteImportante

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

Vedere anche

Riferimenti

Processo e controllo ambiente

_spawn, funzioni di _wspawn