Udostępnij za pośrednictwem


_cwait

Czeka, aż inny proces kończy działanie.

Ważna uwagaWaż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

Zobacz też

Informacje

Proces i kontroli środowiska

_spawn, _wspawn funkcje