_cwait
Vyčká, dokud ukončuje jiným procesem.
Důležité |
---|
Toto rozhraní API nelze použít v aplikacích, které jsou spuštěny v prostředí Windows Runtime.Další informace naleznete v tématu CRT funkce nepodporované s /ZW. |
intptr_t _cwait( int *termstat, intptr_t procHandle, int action );
Parametry
termstat
Ukazatel na vyrovnávací paměť, na němž bude uložen výsledek kód určeného procesu, nebo hodnota NULL.procHandle
Popisovač pro proces pro čekání na (což je proces, který má ukončit před _cwait se lze vrátit).action
NULL: Ignorovala aplikace operačního systému Windows; pro ostatní aplikace: kód akce k provedení v procHandle.
Vrácená hodnota
Pokud určeného procesu byla úspěšně dokončena, vrátí popisovač určený proces a nastaví termstat ke kódu výsledek, který je vrácen rutinou určeného procesu.Jinak vrátí hodnotu -1 a nastaví errno následujícím způsobem.
Hodnota |
Popis |
---|---|
ECHILD |
Neexistuje žádný zadaný proces, procHandle je neplatný nebo volání GetExitCodeProcess nebo WaitForSingleObject rozhraní API se nezdařilo. |
EINVAL |
Formát action je neplatný. |
Další informace o těchto a dalších návratové kódy naleznete v tématu errno, _doserrno, _sys_errlist, and _sys_nerr.
Poznámky
_cwait Funkce čeká na ukončení procesu ID určeného procesu, která je poskytována procHandle.Hodnota procHandle který je předán _cwait musí být v rozsahu, který je vrácen volání _spawn funkce, která vytvořila určeného procesu.Pokud ID procesu ukončuje před _cwait je volána, _cwait vrátí hodnotu okamžitě._cwaitlze použít kterýkoli proces čekání na jakýkoli jiný proces, známé, pro kterou platný popisovač (procHandle) existuje.
termstatbody do vyrovnávací paměti, kde budou uloženy návratový kód určeného procesu.Hodnota termstat označuje, zda určený proces skončila normálně voláním Windows ExitProcess rozhraní API.ExitProcessje volána interně určený proces volá-li exit nebo _exit, vrátí z main, nebo pokud je dosaženo konce main.Další informace o hodnotu, která je předána zpět termstat, naleznete v části GetExitCodeProcess.Pokud _cwait je volána s použitím hodnotu NULL pro termstat, není uložen návratový kód určeného procesu.
action Parametr je ignorován v operačním systému Windows, protože relace typu nadřazený podřízený nejsou implementována v těchto prostředích.
Není-li procHandle , nebo -1 -2 (zpracovává proces aktuální nebo vlákno), se uzavřou popisovač.Proto v takovém případě nepoužívejte Vrácený popisovač.
Požadavky
Rutina |
Požadovaný hlavičkový soubor |
Volitelné záhlaví |
---|---|---|
_cwait |
< process.h > |
< errno.h > |
Další informace o kompatibilitě naleznete v tématu Kompatibilita.
Příklad
// 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] );
}
}
Ekvivalent v rozhraní .NET Framework
System::Diagnostics::Process::WaitForExit