Partager via


_cwait

Attend jusqu'à ce qu'un autre processus se termine.

Important

Cette API ne peut pas être utilisée dans les applications qui s'exécutent dans Windows Runtime.Pour plus d'informations, consultez Fonctions CRT non prises en charge avec /ZW.

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

Paramètres

  • termstat
    Pointeur vers une mémoire tampon dans laquelle le code de sortie de processus spécifié est enregistré, ou NULL.

  • procHandle
    Le handle au processus à attendre (autrement dit, le processus qui doit se terminer avant qu' _cwait puisse retourner).

  • action
    NULL : Ignoré par les applications de système d'exploitation Windows ; pour d'autres applications : code d'interaction à exécuter sur procHandle.

Valeur de retour

Lorsque le processus spécifié s'est terminé avec succès, retourne le handle du processus spécifié et définit termstat au code de résultat retourné par le processus spécifié.Sinon, retourne la valeur à 1 et définit errno comme suit.

Valeur

Description

ECHILD

Aucun processus spécifié n'existe, procHandle est incorrect, ou l'appel à GetExitCodeProcess ou à l'API d' WaitForSingleObject échoué.

EINVAL

action n'est pas valide.

Pour plus d'informations sur ces derniers et d'autres codes de retour, consultez errno, _doserrno, _sys_errlist, et _sys_nerr.

Notes

Les attentes de fonction d' _cwait l'arrêt de l'ID du processus spécifié qui est fourni par procHandle.La valeur d' procHandle passée à _cwait doit être la valeur retournée par l'appel à la fonction d' _spawn qui a créé le processus spécifié.Si l'ID de processus se termine avant qu' _cwait soit appelé, _cwait retourne immédiatement._cwait peut être utilisé par tous les processus pour attendre que tout autre processus pour lequel un handle valide (procHandle) existe.

points d'termstat à une mémoire tampon dans laquelle le code de retour du processus spécifié est enregistré.La valeur d' termstat indique si le processus spécifié s'est terminée normalement en appelant l'API d' ExitProcess .ExitProcess est appelé en interne si le processus spécifié appelle exit ou _exit, retourne la valeur d' main, ou atteint la fin d' main.Pour plus d'informations sur la valeur qui est retournée par termstat, consultez l' GetExitCodeProcess.Si _cwait est appelé à l'aide d'une valeur NULL pour termstat, le code de retour du processus spécifié n'est pas stocké.

Le paramètre d' action est ignoré par le système d'exploitation Windows car les relations parent-enfant ne sont pas implémentées dans ces environnements.

À moins qu' procHandle est -1 ou -2 (les handles au processus ou au thread actuel), le handle est fermé.Par conséquent, dans cette situation, n'utilisez pas le handle retourné.

Configuration requise

Routine

En-tête requis

En-tête facultatif

_cwait

<process.h>

<errno.h>

Pour plus d'informations de compatibilité, consultez Compatibilité.

Exemple

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

Équivalent .NET Framework

System::Diagnostics::Process::WaitForExit

Voir aussi

Référence

Processus et contrôle ambiance

_spawn, fonctions de _wspawn