_cwait
Czeka, aż inny proces kończy działanie.
Ważne |
---|
Ten interfejs API nie można używać w aplikacji, których wykonywanie w Środowisko wykonawcze systemu Windows.Aby uzyskać więcej informacji, zobacz CRT funkcje nie obsługiwane przez /ZW. |
intptr_t _cwait(
int *termstat,
intptr_t procHandle,
int action
);
Parametry
termstat
Wskaźnik do buforu, w którym będzie przechowywany kod wyniku określonego procesu, lub NULL.procHandle
Uchwyt do procesu, aby poczekać (czyli proces, który ma się zakończyć przed _cwait może zwracać).action
Wartości NULL: Ignorowane w aplikacjach systemu operacyjnego Windows; w przypadku innych aplikacji: kod akcji do wykonania na procHandle.
Wartość zwracana
Gdy określony proces została pomyślnie zakończona, zwraca uchwyt określony proces i ustawia termstat do kodu wynik, który jest zwracany przez określony proces.W przeciwnym razie zwraca wartość –1 i ustawia errno się następujące zmiany.
Wartość |
Opis |
---|---|
ECHILD |
Nie istnieje żaden określony proces, procHandle jest nieprawidłowa, wywołanie GetExitCodeProcess lub WaitForSingleObject interfejsu API nie powiodła się. |
EINVAL |
action jest nieprawidłowe. |
Aby uzyskać więcej informacji na temat tych i innych kody powrotne, zobacz errno, _doserrno, _sys_errlist i _sys_nerr.
Uwagi
_cwait Funkcja oczekuje na zakończenie identyfikatora procesu określony proces, który jest udostępniany przez procHandle.Wartość procHandle przekazanego do _cwait powinien mieć taką wartość, który jest zwracany przez wywołanie _spawn funkcji, która utworzyła określony proces.Jeśli identyfikator procesu kończy się przed _cwait jest wywoływana, _cwait zwraca się bezpośrednio._cwaitmoże służyć za pomocą procesu czekać na jakikolwiek inny proces znany, dla którego prawidłowy uchwyt (procHandle) istnieje.
termstatpunkty do buforu, w którym będzie przechowywany kod zwracany przez określony proces.Wartość termstat wskazuje, czy określony proces normalnie zakończone przez wywołanie ExitProcess interfejsu API.ExitProcessjest wywoływana wewnętrznie, jeśli określony proces wywoła exit lub _exit, zwraca z main, lub osiągnięciu końca main.Aby uzyskać więcej informacji o wartość, która jest przekazywana z powrotem przez termstat, zobacz GetExitCodeProcess.Jeśli _cwait nazywa się za pomocą wartości NULL dla termstat, nie znajduje się kod zwracany przez określony proces.
action Parametr jest ignorowany przez system operacyjny Windows, ponieważ relacji nadrzędny podrzędny nie są implementowane w tych środowiskach.
O ile nie procHandle jest -1 lub -2 (obsługiwane do bieżącego procesu lub wątku), uchwyt zostanie zamknięte.W związku z tym w takiej sytuacji nie należy używać zwracany uchwyt.
Wymagania
Rozpoczęto wykonywanie procedury |
Wymaganego nagłówka |
Opcjonalny nagłówka |
---|---|---|
_cwait |
<process.h> |
<errno.h> |
Informacji dotyczących zgodności, zobacz Zgodność.
Przykład
// 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] );
}
}
Odpowiednik w programie .NET Framework
System::Diagnostics::Process::WaitForExit