Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Kombinacje CTRL+C i CTRL+BREAK otrzymują specjalną obsługę przez procesy konsoli. Domyślnie, gdy okno konsoli ma fokus klawiatury, CTRLC lub CTRL++BREAK jest traktowany jako sygnał (SIGINT lub SIGBREAK), a nie jako dane wejściowe klawiatury. Domyślnie te sygnały są przekazywane do wszystkich procesów konsoli dołączonych do konsoli. (Nie ma to wpływu na odłączone procesy. Zobacz Tworzenie konsoli). System tworzy nowy wątek w każdym procesie klienta w celu obsługi zdarzenia. Wątek zgłasza wyjątek, jeśli proces jest debugowany. Debuger może obsłużyć wyjątek lub kontynuować z nieobsługiwanym wyjątkiem.
CTRL+BREAK jest zawsze traktowany jako sygnał, ale aplikacja może zmienić domyślne zachowanie CTRL+C na dwa sposoby, które uniemożliwiają wywoływanie funkcji obsługi:
- Funkcja SetConsoleMode może wyłączyć ENABLE_PROCESSED_INPUT tryb wejściowy dla buforu wejściowego konsoli, dlatego CTRL+C są zgłaszane jako dane wejściowe klawiatury, a nie jako sygnał.
- Gdy element SetConsoleCtrlHandler jest wywoływany z wartościami NULL i TRUE dla jego parametrów, proces wywołujący ignoruje sygnały CTRL+C. Normalne przetwarzanie CTRL+C jest przywracane przez wywołanie polecenia SetConsoleCtrlHandler z wartościami NULL i FALSE . Ten atrybut ignorowania lub nie ignorowania sygnałów CTRL+C jest dziedziczony przez procesy podrzędne, ale można go włączyć lub wyłączyć przez dowolny proces bez wpływu na istniejące procesy.
Aby uzyskać więcej informacji na temat przetwarzania tych sygnałów, w tym przekroczenia limitu czasu, zobacz dokumentację Procedury obsługi wywołania zwrotnego .