Làm cách nào để bắt được một số Ctrl + C sự kiện trong C++?Làm cách nào để nhận sự kiện ctrl-c? (C++)
Trả lời
signal
không phải là cách đáng tin cậy nhất vì nó khác ở chỗ triển khai. Tôi khuyên bạn nên sử dụng sigaction
. Mã của Tom giờ sẽ giống như sau:
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
void my_handler(int s){
printf("Caught signal %d\n",s);
exit(1);
}
int main(int argc,char** argv)
{
struct sigaction sigIntHandler;
sigIntHandler.sa_handler = my_handler;
sigemptyset(&sigIntHandler.sa_mask);
sigIntHandler.sa_flags = 0;
sigaction(SIGINT, &sigIntHandler, NULL);
pause();
return 0;
}
Tôi nghĩ my_handler nên dùng 'int s' làm đối số của nó. 'sig_t' là một kiểu con trỏ hàm. –
Hoạt động trên OSX. Trong tệp main.mm của tôi, tôi thậm chí không cần bao gồm signal.h, stdlib.h hoặc unistd.h. Tôi chỉ bao gồm stdio.h và Foundation/Foundation.h, và sau đó nếu tôi cần phải làm std :: cout stuff để xuất một thông điệp tắt máy, tôi đã đưa iostream. – Volomike
Bạn cần phải nắm bắt những SIGINT signal (chúng ta đang nói POSIX phải không?)
Xem @Gab Royer's câu trả lời cho sigaction.
Ví dụ:
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
void my_handler(sig_t s){
printf("Caught signal %d\n",s);
exit(1);
}
int main(int argc,char** argv)
{
signal (SIGINT,my_handler);
while(1);
return 0;
}
Vâng, đây là câu hỏi phụ thuộc nền tảng.
Nếu bạn đang viết chương trình bảng điều khiển trên POSIX, sử dụng API tín hiệu (#include <signal.h>).
Trong ứng dụng WIN32 GUI, bạn nên xử lý tin nhắn WM_KEYDOWN.
Đối với một giao diện điều khiển ứng dụng Windows, bạn muốn sử dụng để xử lý SetConsoleCtrlHandlerCTRL +C và CTRL +BREAK.
Xem here để biết ví dụ.
- 1. Làm cách nào để nhận Sự kiện Nhấn UITextField?
- 2. Làm cách nào để phủ nhận điều kiện trong PowerShell?
- 3. Làm cách nào để nhận thay đổi kiểm tra sự kiện trên hộp kiểm android?
- 4. Ctrl + C ngắt sự kiện xử lý trong Linux
- 5. Làm cách nào để nhận URL mà sự kiện downloadBegin() được kích hoạt?
- 6. Làm cách nào để nhận sự kiện DoubleClick trong nút radio .NET?
- 7. Tôi làm cách nào để nhận URL đích cho sự kiện onbeforeunload?
- 8. Làm cách nào để nhận Sự kiện nhấp của QLineEdit trong Qt?
- 9. Tôi làm cách nào để Người dùng xác nhận sự kiện thay đổi combobox trong ExtJ?
- 10. Làm cách nào để vô hiệu ngưỡng di chuyển khi nhận sự kiện chạm?
- 11. Làm cách nào để chấp nhận phím xóa lùi trong sự kiện nhấn phím?
- 12. Làm cách nào để nhận các sự kiện hệ thống tệp của Windows trong Java?
- 13. Làm cách nào để nhận các sự kiện UIButton Target, Action and Control?
- 14. C# Xác nhận trước khi rời khỏi sự kiện accept_button
- 15. Làm cách nào để đóng kết nối Sự kiện-Gửi sự kiện trong Flask?
- 16. D3: Làm cách nào để đặt sự kiện "nhấp" và sự kiện "dbclick" cùng một lúc?
- 17. Làm cách nào để biết sự kiện đến từ đầu vào của người dùng trong C#?
- 18. Làm cách nào để gọi sự kiện sơn?
- 19. Làm cách nào để thêm sự kiện onScroll vào iScroll4?
- 20. Làm cách nào để xử lý sự kiện trên QThread?
- 21. Làm cách nào để trì hoãn sự kiện trong xcode?
- 22. Làm cách nào để nghe các sự kiện trong symfony?
- 23. Làm cách nào để liên kết sự kiện với sessionStorage?
- 24. Làm cách nào để ghi đè sự kiện lỗi window.location?
- 25. Làm cách nào để hủy sự kiện bubbling trong ASP.net?
- 26. Nhận sự kiện từ OS
- 27. Sự kiện trong C++
- 28. Làm cách nào để theo dõi người đăng ký một sự kiện trong C#?
- 29. Làm cách nào để hủy sự kiện CellEnter/CellLeave trong C#?
- 30. Làm cách nào để triển khai các sự kiện thông qua giao diện trong C#?
Ứng dụng bảng điều khiển, ứng dụng cửa sổ hoặc gì? – GManNickG
Hệ điều hành Windows, Linux, v.v. – shf301
Vâng, đó là ứng dụng Qt, nhưng tôi đang chạy nó từ bảng điều khiển trong khi phát triển. (Đây là Linux) – Scott