_cwait
Vyčká, dokud neskončí jiný proces.
Důležité |
---|
Toto rozhraní API nelze použít v aplikacích, které jsou spuštěny v Windows Runtime.Další informace naleznete v tématu CRT funkce nejsou podporovány s /ZW. |
intptr_t _cwait(
int *termstat,
intptr_t procHandle,
int action
);
Parametry
termstat
Ukazatel na vyrovnávací paměti, kde bude uložen výsledek kód určený proces, nebo hodnotu NULL.procHandle
Popisovač procesu pro čekání na (to znamená, že proces, který má ukončit před _cwait může vrátit).action
NULL: Ignorována aplikací operačního systému Windows. pro jiné aplikace: kód akce provádět na procHandle.
Vrácená hodnota
V případě, že určený proces byl úspěšně dokončen, vrátí popisovač určený proces a nastaví termstat výsledek kódu, který je vrácený určený proces.V opačném případě vrátí hodnotu –1 a nastaví errno takto.
Value |
Description |
---|---|
ECHILD |
Neexistuje žádný určený proces procHandle je neplatný nebo volání GetExitCodeProcess nebo WaitForSingleObject rozhraní API se nezdařilo. |
EINVAL |
action je neplatná. |
Další informace o těchto i jiných návratové kódy, viz Kód chyby, _doserrno, _sys_errlist a _sys_nerr.
Poznámky
_cwait Funkce čeká na ukončení procesu ID určený proces, poskytované procHandle.Hodnota procHandle který je předán do _cwait by měla být hodnota, která je vrácena pomocí volání _spawn funkce, která vytvořila určený proces.Pokud ID procesu ukončí před _cwait se nazývá _cwait vrátí hodnotu okamžitě._cwaitlze jakýkoli proces čekání pro jiné známé proces který platný popisovač (procHandle) existuje.
termstatbody do vyrovnávací paměti, kde budou uloženy návratový kód určený proces.Hodnota termstat označuje, zda určený proces ukončen obvykle voláním ExitProcess rozhraní API.ExitProcessje volána interně v případě, že určený proces volá exit nebo _exit, vrátí z main, nebo je dosaženo konce main.Další informace o hodnotu, která je předána zpět termstat, viz GetExitCodeProcess.Pokud _cwait je volána pomocí hodnotu NULL pro termstat, návratový kód určený proces není uložen.
action Parametr je ignorován v operačního systému Windows, protože vztahy nadřízený podřízený, nejsou implementovány v těchto prostředích.
Není-li procHandle -1 nebo -2 (zpracovává aktuální proces nebo podproces), bude uzavřena na úchyt.Proto v takovém případě nepoužívejte Vrácený popisovač.
Požadavky
Byla zahájena rutina |
Požadované záhlaví |
Volitelné záhlaví |
---|---|---|
_cwait |
<process.h> |
<errno.h> |
Další informace o kompatibilitě 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