_cwait
wartet auf einen anderen Prozess beendet wird.
Wichtig |
---|
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