_cwait
Menunggu hingga proses lain berakhir.
Penting
API ini tidak dapat digunakan dalam aplikasi yang dijalankan di Windows Runtime. Untuk informasi selengkapnya, lihat Fungsi CRT yang tidak didukung di aplikasi Platform Windows Universal.
Sintaks
intptr_t _cwait(
int *termstat,
intptr_t procHandle,
int action
);
Parameter
termstat
Penunjuk ke buffer tempat kode hasil proses yang ditentukan akan disimpan, atau NULL
.
procHandle
Handel ke proses untuk menunggu (yaitu, proses yang harus dihentikan sebelum _cwait
dapat kembali).
action
NULL
: Diabaikan oleh aplikasi sistem operasi Windows; untuk aplikasi lain: kode tindakan untuk dilakukan pada procHandle
.
Nilai hasil
Ketika proses yang ditentukan telah berhasil diselesaikan, mengembalikan handel proses dan set termstat
yang ditentukan ke kode hasil yang dikembalikan oleh proses yang ditentukan. Jika tidak, mengembalikan -1 dan set errno
sebagai berikut.
errno nilai |
Deskripsi |
---|---|
ECHILD |
Tidak ada proses yang ditentukan, procHandle tidak valid, atau panggilan ke GetExitCodeProcess API atau WaitForSingleObject gagal. |
EINVAL |
action tidak valid. |
Untuk informasi selengkapnya tentang kode pengembalian ini dan lainnya, lihat errno
, , _doserrno
_sys_errlist
, dan _sys_nerr
.
Keterangan
Fungsi _cwait
menunggu penghentian ID proses dari proses yang ditentukan yang disediakan oleh procHandle
. Nilai procHandle
yang diteruskan menjadi _cwait
nilai yang dikembalikan oleh panggilan ke _spawn
fungsi yang membuat proses yang ditentukan. Jika ID proses berakhir sebelum _cwait
dipanggil, _cwait
segera dikembalikan. _cwait
dapat digunakan oleh proses apa pun untuk menunggu proses lain yang diketahui di mana handel yang valid (procHandle
) ada.
termstat
menunjuk ke buffer tempat kode pengembalian proses yang ditentukan akan disimpan. Nilai termstat
menunjukkan apakah proses yang ditentukan dihentikan secara normal dengan memanggil Windows ExitProcess
API. ExitProcess
dipanggil secara internal jika proses yang ditentukan memanggil exit
atau _exit
, mengembalikan dari main
, atau mencapai akhir .main
Untuk informasi selengkapnya tentang nilai yang diteruskan kembali termstat
, lihat GetExitCodeProcess
. Jika _cwait
dipanggil dengan menggunakan NULL
nilai untuk termstat
, kode pengembalian dari proses yang ditentukan tidak disimpan.
Parameter action
diabaikan oleh sistem operasi Windows karena hubungan induk-anak tidak diterapkan di lingkungan ini.
Kecuali procHandle
-1 atau -2 (menangani proses atau utas saat ini), handel akan ditutup. Dalam situasi ini, jangan gunakan handel yang dikembalikan.
Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.
Persyaratan
Rutin | Header yang diperlukan | Header opsional |
---|---|---|
_cwait |
<process.h> | <errno.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
// 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]);
}
}
Urutan output bervariasi dari eksekusi untuk dijalankan.
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.
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk