Bagikan melalui


Sinyal CTRL+C dan CTRL+BREAK

Kombinasi tombol CTRL+C dan CTRL+BREAK menerima penanganan khusus oleh proses konsol. Secara default, ketika jendela konsol memiliki fokus keyboard, CTRL+C atau CTRL+BREAK diperlakukan sebagai sinyal (SIGINT atau SIGBREAK) dan bukan sebagai input keyboard. Secara default, sinyal ini diteruskan ke semua proses konsol yang dilampirkan ke konsol. (Proses yang dilepas tidak terpengaruh. Lihat Pembuatan Konsol.) Sistem membuat utas baru di setiap proses klien untuk menangani peristiwa. Utas memunculkan pengecualian jika proses sedang di-debug. Debugger dapat menangani pengecualian atau melanjutkan dengan pengecualian yang tidak tertangani.

CTRL+BREAK selalu diperlakukan sebagai sinyal, tetapi aplikasi dapat mengubah perilaku CTRL+C default dengan dua cara yang mencegah fungsi handler dipanggil:

  • Fungsi SetConsoleMode dapat menonaktifkan mode input ENABLE_PROCESSED_INPUT untuk buffer input konsol, sehingga CTRL+C dilaporkan sebagai input keyboard daripada sebagai sinyal.
  • Ketika SetConsoleCtrlHandler dipanggil dengan nilai NULL dan TRUE untuk parameternya, proses panggilan mengabaikan sinyal CTRL+C. Pemrosesan CTRL+C normal dipulihkan dengan memanggil SetConsoleCtrlHandler dengan nilai NULL dan FALSE. Atribut mengabaikan atau tidak mengabaikan sinyal CTRL+C ini diwariskan oleh proses turunan, tetapi dapat diaktifkan atau dinonaktifkan oleh proses apa pun tanpa memengaruhi proses yang ada.

Untuk informasi selengkapnya tentang bagaimana sinyal ini diproses, termasuk batas waktu, silakan lihat dokumentasi panggilan balik Rutin Handler.