Freigeben über


_cwait

Wartet, bis ein anderer Prozess beendet wird.

Wichtig

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

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

Parameter

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

  • procHandle
    Das Handle für den Prozess, auf den gewartet werden soll (d. h., der Prozess, der beendet werden muss, bevor _cwait zurückgegeben werden kann).

  • action
    NULL: Wird von Anwendungen des Windows-Betriebssystems ignoriert. Für andere Anwendungen: Für procHandle auszuführenden Aktionscode.

Rückgabewert

Wenn der angegebene Vorgang erfolgreich abgeschlossen wurde, wird das Handle des angegebenen Prozesses zurückgegeben und termstat auf den Ergebniscode festgelegt, der vom angegebenen Prozess zurückgegeben wird. Andernfalls wird –1 zurückgegeben und errno wie folgt festgelegt.

Wert

Beschreibung

ECHILD

Es ist kein angegebener Prozess vorhanden, procHandle ist ungültig, oder der Aufruf der API GetExitCodeProcess oder der API WaitForSingleObject ist fehlgeschlagen.

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-Funktion wartet auf die Beendigung der Prozess-ID des angegebenen Prozesses, die von procHandle bereitgestellt wird. Der Wert von procHandle, der an _cwait übergeben wird, sollte der Wert sein, der vom Aufruf der _spawn-Funktion zurückgegeben wird, die den angegebenen Prozess erstellt hat. Wenn die Prozess-ID vor dem Aufruf von _cwait beendet wird, wird _cwait sofort zurückgegeben. _cwait kann von jedem Prozess verwendet werden, um auf jeden anderen bekannten Prozess zu warten, für den ein gültiges Handle (procHandle) vorhanden ist.

termstat weist auf einen Puffer hin, in dem der Rückgabecode des angegebenen Prozesses gespeichert wird. Der Wert von termstat gibt an, ob der angegebene Prozess regulär durch Aufruf der Windows-API ExitProcess beendet wurde. ExitProcess wird intern aufgerufen, wenn der angegebene Vorgang exit oder _exit aufruft, von main zurückkehrt oder das Ende von main erreicht. Weitere Informationen über den Wert, der durch termstat zurückübergeben wird, finden Sie unter GetExitCodeProcess. Wenn _cwait durch Verwenden eines NULL-Werts für termstat aufgerufen wird, wird der Rückgabecode des angegebenen Prozesses nicht gespeichert.

Der action-Parameter wird vom Windows-Betriebssystem ignoriert, da Beziehungen zwischen übergeordneten und untergeordneten Elementen in diesen Umgebungen nicht implementiert werden.

Sofern procHandle nicht -1 oder -2 ist (Handles für den aktuellen Prozess oder Thread), wird das Handle geschlossen. Daher sollte in dieser Situation das zurückgegebene Handle nicht verwendet werden.

Anforderungen

Routine

Erforderlicher Header

Optionaler Header

_cwait

<process.h>

<errno.h>

Weitere Informationen zur Kompatibilität 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 Umgebungssteuerung

_spawn- und _wspawn-Funktionen