Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Wartet, bis ein anderer Prozess beendet wird.
Wichtig
Diese API kann nicht in Anwendungen verwendet werden, die in Windows-Runtime ausgeführt werden. Weitere Informationen finden Sie im Artikel CRT functions not supported in Universal Windows Platform apps (In Apps für die universelle Windows-Plattform nicht unterstützte CRT-Funktionen).
Syntax
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 den gewartet werden soll (d. h., der Prozess, der beendet werden muss, bevor _cwait zurückgegeben werden kann).
action
NULL: Von Windows-Betriebssystemanwendungen ignoriert; für andere Anwendungen: Aktionscode, der ausgeführt werden procHandlesoll.
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 wie folgt festgelegt errno .
Wert vom Typ errno |
Beschreibung |
|---|---|
ECHILD |
Es ist kein angegebener Prozess vorhanden, procHandle ungültig oder der Aufruf der GetExitCodeProcess API WaitForSingleObject ist fehlgeschlagen. |
EINVAL |
action ist ungültig. |
Weitere Informationen zu diesen und anderen Rückgabecodes finden Sie unter , , _doserrno, _sys_errlistund _sys_nerr.errno
Hinweise
Die _cwait-Funktion wartet auf die Beendigung der Prozess-ID des angegebenen Prozesses, die von procHandle bereitgestellt wird. Der Wert, procHandle an _cwait den ü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 gibt termstat an, ob der angegebene Prozess normal beendet wurde, indem die Windows-API ExitProcess aufgerufen wird. ExitProcess wird intern aufgerufen, wenn der angegebene Vorgang exit oder _exit aufruft, von main zurückkehrt oder das Ende von main erreicht. Weitere Informationen zu dem Wert, der zurückgegeben termstatwird, finden Sie unter GetExitCodeProcess. Wenn _cwait der Rückgabecode des angegebenen Prozesses mit einem NULL Wert termstataufgerufen 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. Verwenden Sie in diesem Fall nicht das zurückgegebene Handle.
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
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
// 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
{
intptr_t hProcess;
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].hProcess = _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].hProcess, _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]);
}
}
Die Reihenfolge der Ausgabe variiert von Ausführung zu Ausführung.
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.