次の方法で共有


_cwait

ほかのプロセスが終了するまで待機します。

重要 : 重要

この API は Windows ランタイムで実行されるアプリケーションで使用することはできません。詳細については、でサポート /ZW CRT 関数" "を参照してください。

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

パラメーター

  • termstat
    指定されたプロセスの結果コードを格納するバッファーへのポインターまたは NULL

  • procHandle
    待機するプロセスへのハンドル (つまり、_cwait が返される前に終了するプロセス。

  • action
    null 値: Windows オペレーティング システムのを返します; 他のアプリケーションの場合: procHandleで実行するアクション コード。

戻り値

指定されたプロセスが正常に完了すると、プロセスのハンドルを返し、指定されたプロセスによって返された結果コードに termstat を設定します。正常に完了しなかった場合は、–1 を返し、errno に次の値を設定します。

価値

説明

ECHILD

指定されたプロセスが存在しないか、procHandle が無効か、GetExitCodeProcess API または WaitForSingleObject API の呼び出しが失敗しました。

EINVAL

action が無効です。

これらのプロパティおよびそのほかのリターン コードに関する詳細については、errno、_doserrno、_sys_errlist、および _sys_nerrを参照してください。

解説

procHandleによって指定されたプロセスのプロセス ID が終了するの _cwait 関数のを待ちます。_cwait に渡される procHandle の値は、指定したプロセスを作成した _spawn 関数の呼び出しによって返される値必要があります。プロセス ID が _cwait の呼び出し前に終了した場合、_cwait はすぐに処理を戻します。プロセスで _cwait を使用すると、有効なハンドル (procHandle) を持つ別のプロセスを待機できます。

指定されたプロセスのリターン コードを格納するバッファーへのtermstat のポインター。termstat の値は、指定されたプロセスが ExitProcess API の呼び出しによって正常に終了したかどうかを示します。指定されたプロセスが exit または _exit を呼び出した場合、main から戻った場合、main の終端に達した場合のいずれかで、ExitProcess が内部的に呼び出されます。termstatに渡される値の詳細については、GetExitCodeProcessを参照してください。_cwait が termstatに対して、null 値を使用して呼び出すと、指定したプロセスのリターン コードは格納されません。

Windows オペレーティング システムの環境では、プロセスの親子関係が実装されていないため、action パラメーターは無視されます。

procHandle が -1 または -2 (現在のプロセスまたはスレッドへのハンドル処理します) 場合、ハンドルは閉じられます。したがって、この状況では、返されたハンドルは使用しないでください。

必要条件

ルーチン

必須ヘッダー

オプション ヘッダー

_cwait

<process.h>

<errno.h>

互換性の詳細については、互換性を参照してください。

使用例

// 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] );
   }
}
  
  
  
  
  
  
  
  
  
  

同等の .NET Framework 関数

System::Diagnostics::Process::WaitForExit

参照

関連項目

プロセス制御と環境制御

_spawn 系関数と _wspawn 系関数