_cwait

 

Pour obtenir la dernière documentation sur Visual Studio 2017, consultez Documentation Visual Studio 2017.

Attend la fin d'un autre processus.

System_CAPS_ICON_important.jpg Important

Cette API ne peut pas être utilisée dans les applications qui s'exécutent dans le 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 où le code de résultat du processus spécifié sera stocké, ou NULL.

procHandle
Handle vers le processus à attendre (autrement dit, le processus qui doit se terminer avant le retour possible de _cwait).

action
NULL : valeur ignorée par les applications du système d'exploitation Windows ; pour d'autres applications : code d'action à effectuer sur procHandle.

Quand le processus spécifié s'est correctement terminé, retourne le handle du processus spécifié et affecte à termstat le code de résultat retourné par le processus spécifié. Sinon, retourne –1 et définit errno comme suit.

ValeurDescription
ECHILDAucun processus spécifié existe, procHandle n’est pas valide ou l’appel à la GetExitCodeProcess ou WaitForSingleObject échoué de l’API.
EINVALaction n'est pas valide.

Pour plus d’informations sur les autres codes de retour, voir errno, _doserrno, _sys_errlist et _sys_nerr.

La fonction _cwait attend la fin de l'ID du processus spécifié fourni par procHandle. La valeur de procHandle qui est passé à _cwait doit avoir la valeur retournée par l’appel à la _spawn fonction qui a créé le processus spécifié. Si l'ID de processus se termine avant l'appel à _cwait, _cwait est immédiatement retourné. _cwait peut être utilisé par n'importe quel processus pour attendre tout autre processus connu pour lequel il existe un handle valide (procHandle).

termstat pointe vers une mémoire tampon où le code de retour du processus spécifié sera stocké. La valeur de termstat indique si le processus spécifié s’est terminé normalement en appelant Windows ExitProcess API. ExitProcess est appelé en interne si le processus spécifié appelle exit ou _exit, est retourné à partir de main ou atteint la fin de main. Pour plus d’informations sur la valeur qui est passée par le biais de termstat, consultez 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 action est ignoré par le système d'exploitation Windows car les relations parent-enfant ne sont pas implémentées dans ces environnements.

Sauf si procHandle est égal à -1 ou -2 (handles vers le thread ou processus actuel), le handle est fermé. Ainsi, dans ce cas, n'utilisez pas le handle retourné.

RoutineEn-tête requisEn-tête facultatif
_cwait<process.h><errno.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

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

Hi, Dad. It's Ann.  
Come here, Ann.  
Thank you, Ann.  
Hi, Dad. It's Beth.  
Hi, Dad. It's Carl.  
Hi, Dad. It's Dave.  

System::Diagnostics::Process::WaitForExit

Processus de contrôle et d’environnement
_spawn, _wspawn, fonctions

Afficher: