2009-03-30 49 views
21

Tôi đoán câu hỏi sẽ nói tất cả, nhưng, điều gì xảy ra nếu ai đó đóng ứng dụng bảng điều khiển C++? Như trong, nhấp vào "x" ở góc trên cùng. Nó có đóng ngay lập tức không? Nó có ném một loại ngoại lệ nào đó không? Đó là hành vi không xác định?Điều gì sẽ xảy ra khi bạn đóng ứng dụng bảng điều khiển C++

+1

Bạn quan tâm đến nền tảng nào? Các cửa sổ? Linux? Điều đó thực sự ảnh hưởng đến câu trả lời. –

+0

Việc sử dụng cụm từ "ứng dụng giao diện điều khiển" ngụ ý các cửa sổ, vì đó là thuật ngữ MS cho các ứng dụng chế độ ký tự. – AndrewR

Trả lời

19

Đóng ứng dụng bảng điều khiển C++ bằng dấu "x" ở góc trên cùng để ném CTRL_CLOSE_EVENT mà bạn có thể nắm bắt và xử lý nếu bạn đặt trình xử lý điều khiển bằng chức năng SetConsoleCtrlHandler. Trong đó bạn có thể ghi đè lên các chức năng đóng và thực hiện bất cứ điều gì bạn muốn làm, và sau đó tùy chọn vẫn thực hiện các hành vi mặc định.

+0

Bạn không thể ghi đè đóng bảng điều khiển. Quá trình thoát cho dù bạn trả về 'TRUE' hoặc' FALSE'. Thay vào đó, nếu bạn trì hoãn hoặc trả lại, ví dụ: để làm sạch, bạn được đưa ra 5 giây theo mặc định trước khi quá trình của bạn bị giết. Nó giống nhau ngay cả khi bạn tự gọi là 'AllocConsole' hoặc' AttachConsole', và đã quá muộn để gọi 'FreeConsole' trong trình xử lý. Nếu người dùng đóng giao diện điều khiển không nên chấm dứt quá trình chính, thì bạn cần phải sử dụng một tiến trình con cho bảng điều khiển và kết nối I/O tiêu chuẩn với các đường ống. – eryksun

8

Trên Linux và các hệ thống Unix khác, giao diện điều khiển chạy như một quá trình riêng biệt. Khi bạn đóng trình bao, nó sẽ gửi tín hiệu SIGHUP tới tiến trình hiện đang hoạt động hoặc các tiến trình không được thực hiện trong nền. Nếu lập trình viên không xử lý nó, quá trình này chỉ đơn giản là chấm dứt. Tín hiệu tương tự được gửi nếu bạn đóng phiên SSH với một thiết bị đầu cuối và một quá trình hoạt động.

3

SIGBREAK được nâng lên trên Windows.

+0

Điều này không cung cấp câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ tác giả, hãy để lại nhận xét bên dưới bài đăng của họ. – DLeh

+1

Chắc chắn rồi. Đó là câu trả lời tôi muốn khi tôi tìm thấy trang này. – slater

+0

'SIGBREAK' chỉ được nâng lên nếu bạn đang sử dụng thời gian chạy C. Bản thân Windows không có tín hiệu Unix. Thời gian chạy C có trình điều khiển điều khiển bàn điều khiển ánh xạ 'CTRL_C_EVENT' thành' SIGINT' và tất cả các sự kiện điều khiển khác thành 'SIGBREAK'. – eryksun

Các vấn đề liên quan