Exporter (0) Imprimer
Développer tout
and
div
eof
not
or
xor
Développer Réduire
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

_cwait

Attend qu'un autre processus se termine.

Remarque importante 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 
);

termstat

Pointeur vers une mémoire tampon dans laquelle le code résultant du processus spécifique sera stocké, ou Null.

procHandle

Le gestionnaire du processus qui doit attendre (autrement dit, le processus qui doit se terminer avant que _cwait ne retourne de valeur).

action

Null : Ignoré par les applications du système d'exploitation Windows ; pour les autres applications : code d'action à effectuer sur procHandle.

Lorsque le processus spécifié s'est terminée avec succès, il retourne le gestionnaire du processus spécifié et définit termstat au code de résultat renvoyé par le processus spécifié. Sinon, il retourne – 1 et définit errno comme suit.

Valeur

Description

ECHILD

Aucun processus spécifié n'existe, procHandle n'est pas valide, ou l'appel de GetExitCodeProcess ou de l'API WaitForSingleObject échoue.

EINVAL

action n'est pas valide.

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

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

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

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.

À moins que procHandle vale -1 ou -2 (les handles du processus ou du thread courant), le handle sera fermé. Par conséquent, dans cette situation, n'utilisez pas le handle retourné.

Routine

En-tête requis

En-tête facultatif

_cwait

<process.h>

<errno.h>

Pour plus d'informations sur la compatibilité, consultez Compatibilité.

// 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] );
   }
}
Hello, papa.  C'est Anne.
Viens ici, Anne.
Merci, Anne.
Hello, papa.  C'est Beth.
Hello, papa.  C'est Carl.
Hello, papa.  C'est Dave.  

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft