• About
  • Advertise
  • Privacy & Policy
  • Contact
NQ NEWS
  • Kiến thức tổng hợp
    • Development
    • Deep Learning
    • Cloud Computing
    • Kiến thức bảo mật
    • Tin học văn phòng
  • Thủ thuật
    • Phần Mềm
    • Sửa lỗi máy tính
    • Bảo mật máy tính
    • Tăng tốc máy tính
    • Thủ thuật Wifi
  • Quản trị hệ thống
    • Giải pháp bảo mật
    • Mail Server
    • Mạng LAN – WAN
    • Máy chủ
    • Windows Server 2012
  • Tin tức
No Result
View All Result
  • Kiến thức tổng hợp
    • Development
    • Deep Learning
    • Cloud Computing
    • Kiến thức bảo mật
    • Tin học văn phòng
  • Thủ thuật
    • Phần Mềm
    • Sửa lỗi máy tính
    • Bảo mật máy tính
    • Tăng tốc máy tính
    • Thủ thuật Wifi
  • Quản trị hệ thống
    • Giải pháp bảo mật
    • Mail Server
    • Mạng LAN – WAN
    • Máy chủ
    • Windows Server 2012
  • Tin tức
No Result
View All Result
NQ NEWS
No Result
View All Result
Home Kiến thức tổng hợp Lập trình

Xử lý tín hiệu (Signal Handling) trong C++

@admiz by @admiz
27/12/2021
in Lập trình
0

Tín hiệu (Signal) là các ngắt (interrupt) được phân phối tới một tiến trình xử lý bởi hệ điều hành mà có thể kết thúc một chương trình. Bạn có thể tạo các ngắt bằng việc nhấn CTRL+C trên hệ thống UNIX, LINUX, Mac OS hoặc Windows.

Có các signal mà không thể bị bắt bởi chương trình, nhưng cũng có signal mà bạn có thể bắt trong chương trình của bạn, và có thể thực hiện các hành động thích hợp dựa trên signal đó. Những signal này được định nghĩa trong Header file của C++ là <csignal>.

SignalMiêu tả
SIGABRTSự kết thúc bất thường của chương trình, ví dụ một lời gọi tới abort
SIGFPEMột hoạt động số học không đúng, ví dụ như chia cho số 0 hoặc một hoạt động làm tràn luồng (overflow)
SIGILLSự phát hiện một chỉ lệnh không hợp lệ
SIGINTNhận một tín hiệu tương tác
SIGSEGVMột truy cập không hợp lệ tới storage
SIGTERMMột yêu cầu kết thúc được gửi tới chương trình

Hàm signal() trong C++

Thư viện xử lý tín hiệu trong C++ cung cấp hàm signal để bẫy các sự kiện không được mong đợi. Dưới đây là cú pháp của hàm signal() trong C++:

void (*signal (int sig, void (*func)(int)))(int);

Hàm này nhận hai tham số: tham số đầu tiên là một số nguyên mà biểu diễn số hiệu tín hiệu (signal number) và tham số thứ hai là một con trỏ tới hàm xử lý tín hiệu.

Bây giờ, viết một chương trình C++ đơn giản để bắt tín hiệu SIGINT bởi sử dụng hàm signal() trong C++. Bất cứ tín hiệu nào bạn muốn bắt trong chương trình, bạn phải ghi tín hiệu đó bởi sử dụng hàm signal và liên kết nó với một Signal Handler. Bạn xét ví dụ:

#include <iostream> 
#include <csignal> 

using namespace std; 

void signalHandler( int tinhieuso ) 
{ 
    cout << "Tin hieu ngung chuong trinh (" << tinhieuso << ") da duoc nhan.n"; 
    // ket thuc chuong trinh 
   exit(tinhieuso); 
  

int main () 
{ 
    // dang ky tin hieu SIGINT va Signal Handler 
    signal(SIGINT, signalHandler); 
    while(1){ 
        cout << "Going to sleep...." << endl; 
      
return 0; 
 

Biên dịch và chạy chương trình C++ trên sẽ cho kết quả sau:

Hàm signal() trong C++

Bây giờ, nhấn CTRL+C để ngắt chương trình và bạn sẽ thấy rằng chương trình sẽ bắt tín hiệu này và sẽ in cái gì đó như sau:

Going to sleep.... 
Going to sleep.... 
Going to sleep.... 
Tin hieu ngung chuong trinh (2) da duoc nhan.

Hàm raise() trong C++

Bạn có thể tạo các tín hiệu bởi hàm raise() trong C++, mà nhận một số integer biểu diễn signal number như một tham số và có cú pháp như sau:

int raise (signal sig);

Ở đây, sig là signal number để gửi bất kỳ loại tín hiệu nào: SIGINT, SIGABRT, SIGFPE, SIGILL, SIGSEGV, SIGTERM, SIGHUP. Dưới đây là ví dụ tạo một tín hiệu nội tại bởi sử dụng hàm raise() trong C++, như sau:

#include <iostream> 
#include <csignal> 

using namespace std; 

void signalHandler( int tinhieuso ) 
{ 
    cout << "Tin hieu ngung chuong trinh (" << tinhieuso << ") da duoc nhan.n"; 
    // ket thuc chuong trinh 
    exit(tinhieuso); 
  
int main () 
{ 
    int i = 0; 
    // dang ky tin hieu SIGINT va Signal Handler 
    signal(SIGINT, signalHandler); 
    while(++i){ 
       cout << "Going to sleep ... (Met Wa roi!!!)" << endl; 
       if( i == 7 ){ 
          raise( SIGINT); 
         
      
return 0;
 

Biên dịch và chạy chương trình C++ trên sẽ cho kết quả sau:

Hàm raise() trong C++

Theo Tutorialspoint

Bài trước: Bộ tiền xử lý (Preprocessor) trong C++

Bài tiếp: Đa luồng (Multithread) trong C++

  • Hàm trong C/C++
Post Views: 155
Tags: Hàm raise trong C++Hàm signal trong C++Xử lý tín hiệu trong C++
Previous Post

Đánh giá nhanh MacBook Pro 13 inch 2020

Next Post

Mail server là gì?

Related Posts

Dien Tich Tam Giac 640 1
Lập trình

Công thức tính diện tích tam giác: vuông, thường, cân, đều

26/12/2021
Huong Dan Cai Dat Node Js 640 1
Lập trình

Hướng dẫn cài đặt Node.js

26/12/2021
Cau Truc Du Lieu Hang Doi Queue 640 1
Lập trình

Cấu trúc dữ liệu hàng đợi (Queue)

26/12/2021
Hoc Css 640 8
Lập trình

Thanh điều hướng – Navigation Bar trong CSS

26/12/2021
Ms Sql Server Management Studio 640 3
Lập trình

Quản lý MS SQL Server bằng Management Studio

26/12/2021
Java Development Kit 1
Lập trình

Tải Java Development Kit 8-update-281

26/12/2021
Next Post
Mail Server 1

Mail server là gì?

Bài mới nhất

Thiết Kế Website Công Ty Viễn Thông, Dịch Vụ Mạng Chuyên Nghiệp, Uy Tín 612d253e4213f.jpeg

Thiết kế website công ty viễn thông, dịch vụ mạng chuyên nghiệp, uy tín

25/06/2025
Top 11 Trang Web Hẹn Hò Uy Tín, Chất Lượng Nhất Dành Cho Người độc Thân 612d2550e83dd.jpeg

Top 11 trang web hẹn hò uy tín, chất lượng nhất dành cho người độc thân

25/06/2025
Top 13 Các Trang Web Dành Cho Máy Tính Pc Và Laptop Tốt Nhất Hiện Nay 612d254a46374.jpeg

Top 13 các trang web dành cho máy tính PC và laptop tốt nhất hiện nay

24/06/2025
Cách Xây Dựng Fanpage Từ Con Số 0 Phục Vụ Hoạt động Kinh Doanh Online 612d238a1301b.jpeg

Cách xây dựng fanpage từ con số 0 phục vụ hoạt động kinh doanh online

24/06/2025
Sass Là Gì? Lợi ích, Các Tính Năng Cơ Bản Và Cách Cài đặt Sass 612d20d9dfb07.jpeg

Sass là gì? Lợi ích, các tính năng cơ bản và cách cài đặt Sass

23/06/2025

Danh mục

  • Android
  • Bảo mật máy tính
  • Bảo mật, Antivirus
  • Chuyện công nghệ
  • Deep Learning
  • Development
  • Dịch vụ công trực tuyến
  • Dịch vụ nhà mạng
  • Giải pháp bảo mật
  • Hệ thống
  • Hệ thống
  • iPhone
  • Kiến thức bảo mật
  • Kiến thức cơ bản phổ thông
  • Kiến thức Marketing căn bản
  • Kiến thức tổng hợp
  • Lập trình
  • Linux
  • Linux OS
  • macOS
  • Mail Server
  • Mạng LAN – WAN
  • Máy ảo
  • Máy chủ
  • ms excel
  • ms-powerpoint
  • Nền tảng điện toán đám mây
  • Phần cứng
  • Phần Mềm
  • Quản trị hệ thống
  • Raspberry Pi
  • Sửa lỗi máy tính
  • Tăng tốc máy tính
  • Thủ thuật
  • Thủ thuật SEO
  • Thủ thuật Wifi
  • Tiện ích hệ thống
  • Tin học văn phòng
  • Tin tức
  • Uncategorized
  • Ứng dụng
  • Website
  • Windows Server 2012

Thẻ

#app #chatbot #chatbot tự động #CRM #Kiến thức cơ bản #Techblog #Thiết kế website Android apple CPU Email Marketing Google Google Drive hacker HTML hàm python hàm python có sẵn hình nền hình nền máy tính học css học python học SQL ios iphone iphone 12 iPhone X macos Microsoft mssql MS SQL Server ngôn ngữ lập trình python Raspberry Pi Samsung smartphone SQL SQL Server tham số trong C thủ thuật windows 10 tài liệu python windows windows 10 YouTube điện thoại thông minh ứng dụng
  • About
  • Advertise
  • Privacy & Policy
  • Contact

© 2022 Pha Le Solution

No Result
View All Result
  • Home

© 2022 Pha Le Solution