Tôi có một số vấn đề với việc xử lý CTRL +C sự kiện, trong một Win32 C++ console chương trình.Xử lý tổ hợp phím CTRL + C trên Win32
Về cơ bản chương trình của tôi trông như thế này: (dựa trên câu hỏi này khác: Windows Ctrl-C - Cleaning up local stack objects in command line app)
bool running;
int main() {
running = true;
SetConsoleCtrlHandler((PHANDLER_ROUTINE) consoleHandler, TRUE);
while (running) {
// do work
...
}
// do cleanup
...
return 0;
}
bool consoleHandler(int signal) {
if (signal == CTRL_C_EVENT) {
running = false;
}
return true;
}
Vấn đề là các mã ngẫu nhiên không được thực hiện ở tất cả.
Sau khi thực hiện hàm xử lý, quá trình được chấm dứt, nhưng không thực thi mã sau vòng lặp chính. Chuyện gì vậy?
EDIT: theo yêu cầu, đây là một trường hợp thử nghiệm tối thiểu tương tự như chương trình của tôi: http://pastebin.com/6rLK6BU2
tôi không nhận được "thử nghiệm dọn dẹp-hướng dẫn" chuỗi trong đầu ra của tôi.
Tôi không biết điều này có quan trọng hay không, tôi đang biên soạn với MinGW.
EDIT 2: Sự cố với chương trình trường hợp thử nghiệm là sử dụng chức năng Sleep()
. Nếu không có nó, chương trình sẽ hoạt động như mong đợi.
Trong Win32, trình xử lý hàm chạy trong một chuỗi khác, vì vậy khi trình xử lý/luồng kết thúc thực thi, luồng chính đang ngủ. Có lẽ đây là nguyên nhân của quá trình gián đoạn?
Trả về 'SetConsoleCtrlHandler' là gì? – Caesar
Giá trị trả về của SetConsoleCtrlHandler là gì? Bạn không kiểm tra lỗi đó, btw – lpapp
Bạn có chắc chắn chức năng 'ConsoleHandler' chạy không? Nếu bạn chạy chương trình trong trình gỡ rối và thiết lập một điểm ngắt trong nó, nó sẽ dừng lại ở điểm ngắt? –