_cwait
Başka bir işlem sonlandırana kadar bekler.
Önemli
Bu API, Windows Çalışma Zamanı yürütülen uygulamalarda kullanılamaz. Daha fazla bilgi için bkz. Evrensel Windows Platformu uygulamalarında desteklenmeyen CRT işlevleri.
Sözdizimi
intptr_t _cwait(
int *termstat,
intptr_t procHandle,
int action
);
Parametreler
termstat
Belirtilen işlemin sonuç kodunun depolanacağı arabelleğe işaret eden veya NULL
.
procHandle
Beklenme işleminin tanıtıcısı (yani, daha önce _cwait
sonlandırması gereken işlem geri dönebilir).
action
NULL
: Windows işletim sistemi uygulamaları tarafından yoksayılır; diğer uygulamalar için: üzerinde procHandle
gerçekleştirilecek eylem kodu.
Dönüş değeri
Belirtilen işlem başarıyla tamamlandığında, belirtilen işlemin tutamacını döndürür ve belirtilen işlem tarafından döndürülen sonuç koduna ayarlar termstat
. Aksi takdirde, -1 döndürür ve aşağıdaki gibi ayarlar errno
.
errno değer |
Açıklama |
---|---|
ECHILD |
Belirtilen işlem yok, procHandle geçersiz veya veya WaitForSingleObject API çağrısı GetExitCodeProcess başarısız oldu. |
EINVAL |
action geçersizdir. |
Bunlar ve diğer iade kodları hakkında daha fazla bilgi için bkz. errno
, _doserrno
, _sys_errlist
ve _sys_nerr
.
Açıklamalar
işlevi, _cwait
tarafından procHandle
sağlanan belirtilen işlemin işlem kimliğinin sonlandırılmasına bekler. geçirilen değeri procHandle
_cwait
, belirtilen işlemi oluşturan işlev çağrısı _spawn
tarafından döndürülen değer olmalıdır. İşlem kimliği çağrılmadan önce _cwait
sonlandırılırsa, _cwait
hemen döndürür. _cwait
geçerli bir tanıtıcının (procHandle
) bulunduğu bilinen diğer işlemleri beklemek için herhangi bir işlem tarafından kullanılabilir.
termstat
belirtilen işlemin dönüş kodunun depolanacağı arabelleğe işaret eder. değeri termstat
, belirtilen işlemin Windows ExitProcess
API'sini çağırarak normal şekilde sonlandırılıp sonlandırılmadığını gösterir. ExitProcess
, veya exit
_exit
çağrısında bulunursa dahili olarak çağrılır veya öğesinin içinden main
döndürür veya sonuna main
ulaşır. üzerinden termstat
geri geçirilen değer hakkında daha fazla bilgi için bkz GetExitCodeProcess
. . için termstat
bir NULL
değer kullanılarak çağrılırsa_cwait
, belirtilen işlemin dönüş kodu depolanmaz.
Üst-alt action
ilişkiler bu ortamlarda uygulanmadığından, parametre Windows işletim sistemi tarafından yoksayılır.
-1 veya -2 değilse procHandle
(geçerli işlem veya iş parçacığının tanıtıcıları), tanıtıcı kapatılır. Bu durumda, döndürülen tanıtıcıyı kullanmayın.
Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.
Gereksinimler
Yordam | Gerekli başlık | İsteğe bağlı üst bilgi |
---|---|---|
_cwait |
<process.h> | <errno.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
// 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
{
intptr_t hProcess;
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].hProcess = _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].hProcess, _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]);
}
}
Çıktının sırası çalıştırmadan çalıştırmaya göre değişir.
Hi, Dad. It's Ann.
Come here, Ann.
Thank you, Ann.
Hi, Dad. It's Beth.
Hi, Dad. It's Carl.
Hi, Dad. It's Dave.