Sdílet prostřednictvím


_cwait

Vyčká, dokud ukončuje jiným procesem.

Důležitá poznámkaDů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

Viz také

Referenční dokumentace

Řízení procesů a prostředí

_spawn, _wspawn – funkce