_cwait

wartet auf einen anderen Prozess beendet wird.

Wichtiger HinweisWichtig

Diese API kann nicht in den Anwendungen verwendet werden, die in Windows-Runtime ausführen.Weitere Informationen finden Sie unter CRT-Funktionen unterstützt nicht mit /ZW.

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

Parameter

  • termstat
    Zeiger auf einen Puffer, in dem der Ergebniscode des angegebenen Prozesses gespeichert wird oder NULL.

  • procHandle
    Das Handle für den Prozess, auf das gewartet werden soll (das heißt, der Prozess, der beendet werden muss, bevor _cwait zurückgeben kann).

  • action
    NULL: Ignoriert von Windows-Betriebssystem-Anwendungen; für andere Anwendungen: auf procHandle Aktion auszuführen.

Rückgabewert

Wenn der angegebene Prozess erfolgreich abgeschlossen wurde, gibt das Handle des angegebenen Prozesses zurück und legt termstat den Ergebniscode fest, der durch den angegebenen Prozess zurückgegeben wird.Andernfalls gibt zurück - 1 und legt errno wie folgt.

Wert

Beschreibung

ECHILD

Kein gegebener Prozess vorhanden ist, ist procHandle ungültig, oder der Aufruf fehlgeschlagene GetExitCodeProcess oder WaitForSingleObject APIs.

EINVAL

"action" ist ungültig.

Weitere Informationen zu diesen und anderen Rückgabecodes, finden Sie unter errno, _doserrno, _sys_errlist und _sys_nerr.

Hinweise

Die _cwait-Funktionswartung die Beendigung der Prozesses-ID des angegebenen Prozesses, der von procHandle bereitgestellt wird.Der Wert von procHandle, der zu _cwait übergeben wird, sollte der Wert sein, der durch den Aufruf der - _spawn-Funktion zurückgegeben wird, die den angegebenen Prozess erstellt hat.Wenn die Prozess-ID beendet wird, bevor _cwait aufgerufen wird, gibt _cwait sofort zurück._cwait kann von jedem Prozess verwendet werden, um auf einen anderen bekannten Prozess wartet, für den ein gültiges Handle (procHandle) vorhanden ist.

termstat zeigt auf einen Puffer, in dem der Rückgabecode des angegebenen Prozesses gespeichert wird.Der Wert von termstat gibt an, ob der angegebene Prozess ordnungsgemäß beendet wurde, indem das ExitProcess API aufgerufen wurde.ExitProcess wird intern aufgerufen, wenn der angegebene Prozess exit oder _exit aufruft, von main zurückgibt oder das Ende von main erreicht.Weitere Informationen zu den Wert, der zurückgegeben termstat durch ist, finden Sie unter GetExitCodeProcess.Wenn _cwait aufgerufen wird, indem Sie einen NULL-Wert für termstat verwendet, wird der Rückgabecode des angegebenen Prozesses nicht gespeichert.

Der action-Parameter wird durch das Windows-Betriebssystem ignoriert, da Beziehungen zwischen übergeordneten und untergeordneten Elementen nicht in dieser Umgebung implementiert werden.

Es sei denn, procHandle -1 oder -2 (Handles zur aktuellen verarbeiten oder Thread), ist, wird das Handle geschlossen.Daher werden in dieser Situation verwenden Sie nicht das zurückgegebene Handle.

Anforderungen

Routine

Erforderlicher Header

Optionaler Header

_cwait

<process.h>

<errno.h>

Weitere Kompatibilitätsinformation finden Sie unter Kompatibilität.

Beispiel

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

.NET Framework-Entsprechung

System::Diagnostics::Process::WaitForExit

Siehe auch

Referenz

Prozess- und Umgebungssteuerelement

_spawn, _wspawn Funktionen