Udostępnij za pośrednictwem


_cwait

Oczekuje, aż do zakończenia inny proces.

Ważna uwagaWażne

Ten interfejs API nie można używać w aplikacji, które są wykonywane w Środowisko wykonawcze systemu Windows.Aby uzyskać więcej informacji, zobacz funkcji CRT nie obsługują /ZW.

intptr_t _cwait(     int *termstat,    intptr_t procHandle,    int action  );

Parametry

  • termstat
    Wskaźnik do buforu, w którym będą przechowywane kod wyniku określonego procesu, lub wartość NULL.

  • procHandle
    Dojście do procesu oczekiwania (oznacza to, że proces, który ma zostać zakończone przed _cwait może zwrócić).

  • action
    Wartość NULL: Zignorowane przez aplikacje systemu operacyjnego Windows; w przypadku innych aplikacji: kod akcji do wykonania na procHandle.

Wartość zwracana

Po pomyślnym ukończeniu określonego procesu Zwraca dojście określonego procesu i ustawia termstat do kodu wynik zwracany przez określonego procesu.W przeciwnym razie zwraca wartość -1 i ustawia errno w następujący sposób.

Wartość

Opis

ECHILD

Nie istnieje żaden określony proces, procHandle jest nieprawidłowa lub wywołanie GetExitCodeProcess lub WaitForSingleObject interfejsu API nie powiodło się.

EINVAL

action jest nieprawidłowy.

Aby uzyskać więcej informacji na temat tych i innych kody powrotne, zobacz errno, _doserrno, _sys_errlist, and _sys_nerr.

Uwagi

_cwait Funkcji oczekuje na zakończenie procesu Identyfikator określonego procesu dostarczanego przez procHandle.Wartość procHandle przekazania do _cwait powinien być wartość zwróconą przez wywołanie _spawn funkcji, które utworzono określonego procesu.Jeśli identyfikator procesu kończy pracę przed _cwait jest wywoływana _cwait zwraca natychmiast._cwaitmożna w dowolny sposób poczekaj jakiś inny proces znane, dla którego nieprawidłowy uchwyt (procHandle) istnieje.

termstatpunkty w buforze, gdzie będzie przechowywany kod powrotny określonego procesu.Wartość termstat wskazuje, czy określony proces zakończony prawidłowo przez wywołanie Windows ExitProcess interfejsu API.ExitProcesswewnętrznie jest wywoływana, gdy określony proces wywołuje exit lub _exit, zwraca z main, lub osiągnięciu końca main.Aby uzyskać więcej informacji o wartość, która jest przekazywana ponownie termstat, zobacz GetExitCodeProcess.Jeśli _cwait jest wywoływana przy użyciu wartości NULL dla termstat, nie znajduje się kod powrotny określonego procesu.

action Parametru jest ignorowana przez system operacyjny Windows, ponieważ relacji nadrzędny podrzędny nie jest zaimplementowana w tych środowisk.

O ile nie procHandle jest wartość -1 lub -2 (obsługiwane do bieżącego procesu lub wątku), zostaną zamknięte dojście.Dlatego w takiej sytuacji nie należy używać zwracane dojście.

Wymagania

Procedura

Wymagany nagłówek

Opcjonalne nagłówka

_cwait

< process.h >

< errno.h >

Aby uzyskać więcej informacji na temat 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

Zobacz też

Informacje

Procedury kontroli środowiska

_spawn, _wspawn — Funkcje