cserialport 循環發送信號_C++信號處理

4eb4f35e-c840-eb11-8da9-e4434bdf6706.png

免費C語言教程:阿里云大學——開發者課堂(點擊文章最下方“了解更多”)

信號是由操作系統傳給進程的中斷,會提早終止一個程序。在 UNIX、LINUX、Mac OS X 或 Windows 系統上,可以通過按 Ctrl+C 產生中斷。

有些信號不能被程序捕獲,但是下表所列信號可以在程序中捕獲,并可以基于信號采取適當的動作。這些信號是定義在 C++ 頭文件 中。

signal() 函數

C++ 信號處理庫提供了 signal 函數,用來捕獲突發事件。以下是 signal() 函數的語法:

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

這個函數接收兩個參數:第一個參數是一個整數,代表了信號的編號;第二個參數是一個指向信號處理函數的指針。

讓我們編寫一個簡單的 C++ 程序,使用 signal() 函數捕獲 SIGINT 信號。不管您想在程序中捕獲什么信號,您都必須使用 signal 函數來注冊信號,并將其與信號處理程序相關聯。看看下面的實例:

#include #include using namespace std;void signalHandler( int signum ){ cout << "Interrupt signal (" << signum << ") received.";  // 清理并關閉 // 終止程序   exit(signum); }int main (){ // 注冊信號 SIGINT 和信號處理程序 signal(SIGINT, signalHandler);   while(1){ cout << "Going to sleep...." << endl; sleep(1); }  return 0;}

當上面的代碼被編譯和執行時,它會產生下列結果:

Going to sleep....Going to sleep....Going to sleep....

現在,按 Ctrl+C 來中斷程序,您會看到程序捕獲信號,程序打印如下內容并退出:

Going to sleep....Going to sleep....Going to sleep....Interrupt signal (2) received.

raise() 函數

您可以使用函數 raise() 生成信號,該函數帶有一個整數信號編號作為參數,語法如下:

int raise (signal sig);

在這里,sig 是要發送的信號的編號,這些信號包括:SIGINT、SIGABRT、SIGFPE、SIGILL、SIGSEGV、SIGTERM、SIGHUP。以下是我們使用 raise() 函數內部生成信號的實例:

#include #include using namespace std;void signalHandler( int signum ){ cout << "Interrupt signal (" << signum << ") received.";  // 清理并關閉 // 終止程序   exit(signum); }int main (){ int i = 0; // 注冊信號 SIGINT 和信號處理程序 signal(SIGINT, signalHandler);   while(++i){ cout << "Going to sleep...." << endl; if( i == 3 ){ raise( SIGINT); } sleep(1); }  return 0;}

當上面的代碼被編譯和執行時,它會產生下列結果,并會自動退出:

Going to sleep....Going to sleep....Going to sleep....Interrupt signal (2) received.

免費C語言教程:阿里云大學——開發者課堂(點擊下方“了解更多”)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/270980.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/270980.shtml
英文地址,請注明出處:http://en.pswp.cn/news/270980.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Javascript第一天

引入的三種方法&#xff1a; 1、將javascript代碼插入html文檔<head>部分的<script>標簽中 例&#xff1a;<head> <script type“text/javascript”> //javascript 代碼 alert(‘hello world’); </script> </head> 2、將javascript代碼存…

不要在foreach循環里進行元素的remove/add操作。remove元素請使用iteratot方式,如果并發操作,需要對Iterator對象加鎖

不要在foreach循環里進行元素的remove/add操作。remove元素請使用iteratot方式&#xff0c;如果并發操作&#xff0c;需要對Iterator對象加鎖

Win7和Win10操作系統優劣對比,看完你就懂了!

一直以來&#xff0c;針對微軟的Windows系統討論最熱烈的莫過于win7和win10系統了&#xff0c;兩者究竟誰好誰壞&#xff1f;小編今天就帶大家從幾個不同的角度分析兩者的優缺點&#xff0c;如有不對&#xff0c;歡迎大家指正&#xff01;一、win 7系統的幾大特點&#xff1a;1…

linux bash命令找不到,Linux下提示命令找不到:bash:command not found

Linux下輸入某些命令時會提示&#xff1a;bash:command not found。首先&#xff0c;查看$PATH中是否包含了這些命令。$PATH&#xff1a;決定了shell到哪些目錄中去尋找命令或程序&#xff0c;PATH值是一系列的目錄。當運行程序時&#xff0c;linux到這些目錄下搜索進行編譯鏈接…

dhcp 續約review報文_Linux的私房菜 DHCP

譯DHCP服務DHCP的全稱是動態主機配置協議&#xff0c;用來自動給客戶機分配TCP/IP信息的網絡協議。Dynamic Host Configuration Protocol&#xff0c;前身是BOOTP協議&#xff0c;是一個局域網的網絡協議&#xff0c;使用UDP協議工作&#xff0c;統一使用兩個IANA分配的端口&am…

硬件編程:硬件開發中常用的幾種通信接口總結

在嵌入式系統中&#xff0c;板上通信接口是指用于將各種集成電路與其他外圍設備交互連接的通信通路或總線。以下內容為常用板上通信接口&#xff1a;包括I2C、SPI、UART、1-Wire&#xff1a;I2C總線I2C總線是一種同步、雙向、半雙工的兩線式串行接口總線。這里&#xff0c;半雙…

集合初始化時,指定集合初始值大小

集合初始化時&#xff0c;指定集合初始值大小

hadoop常用linux命令,# Hadoop學習筆記(二)——Linux常用命令

ifconfigLinux ifconfig命令用于顯示或設置網絡設備。ifconfig可設置網絡設備的狀態&#xff0c;或是顯示目前的設置。ifconfig.png語法ifconfig [網絡設備][down up -allmulti -arp -promisc][add][del][][io_addr][irq][media][mem_start][metric][mtu][netmask][tunnel][-br…

數據庫:計算地球上兩個坐標點之間里程

今天給大家分享計算地球上兩個坐標點之間里程不同數據庫版本的腳本。1、SQLServer腳本–-計算地球上兩個坐標點&#xff08;經度&#xff0c;緯度&#xff09;之間距離sql函數 CREATE FUNCTION [dbo].[fnGetDistance](LatBegin REAL , LngBegin REAL, LatEnd REAL, LngEnd REA…

jvm 崩潰日志設置_JVM致命錯誤日志(hs_err_pid.log)分析(轉載)

當jvm出現致命錯誤時&#xff0c;會生成一個錯誤文件 hs_err_pid.log&#xff0c;其中包括了導致jvm crash的重要信息&#xff0c;可以通過分析該文件定位到導致crash的根源&#xff0c;從而改善以保證系統穩定。當出現crash時&#xff0c;該文件默認會生成到工作目錄下&#x…

使用entrySet遍歷Map類集合KV,而不是keySet方式進行遍歷

使用entrySet遍歷Map類集合KV,而不是keySet方式進行遍歷

【Qt開發】Qt Creator在Windows上的調試器安裝與配置

Qt Creator在Windows上的調試器安裝與配置 如果安裝Qt時使用的是Visual Studio的預編譯版&#xff0c;那么很有可能就會缺少調試器&#xff08;Debugger&#xff09;&#xff0c;而使用MSVC的Qt對應的原生調試器是CDB&#xff08;對應MinGW的Qt使用GDB調試器&#xff09;。本文…

linux rsync 帶密碼,Linux配置ssh無密碼驗證,rsync

1.我先聲明主機pangzhiminglinux 192.168.200.129CentOS2 192.168.200.130方法大概是這樣&#xff1a;如果想從pangzhiminglinux的普通用戶無驗證登錄到CentOS2的普通用戶(單方向的)&#xff0c;那么就要在兩個主機都建立一個相同名字&#xff0c;相同密碼的普通…

Java:Lombok插件用法筆記

1、Lombok是什么東東&#xff1f;官方介紹Lombok項目是一個Java庫&#xff0c;它可以自動嵌入你的編輯器和構建工具中&#xff0c;從而減少你的代碼量。永遠不要再寫另一個getter或equals方法&#xff0c;它帶有一個注釋的你的類有一個功能全面的生成器&#xff0c;自動化你的日…

bzoj2058: [Usaco2010 Nov]Cow Photographs(逆序對)

題目大意&#xff1a;給出n個數的序列&#xff0c;每次可以交換相鄰的兩個數&#xff0c;問把序列變成編號i在編號i1左邊&#xff0c;編號1在編號n右邊(一個環)最少需要多少步。如&#xff1a;35421最少交換兩次變為34512。 一開始看到這題&#xff0c;只會O(n)&#xff0c;后來…

sap實施和開發哪個前景_2021年了!還不知道 SAP顧問的職業前景?

一、先說什么是SAP。百度詞條的解釋&#xff1a;SAP有兩個意思一為“System Applications and Products”的簡稱&#xff0c;是SAP公司的產品——企業管理解決方案的軟件名稱。也代指SAP公司。二為SAP開發的ERP&#xff08;Enterprise-wide Resource Planning&#xff09;軟件名…

Linux找最大最小值的命令,Linux中awk命令正確的求最大值、最小值、平均值、總和...

test.txt文件內容&#xff1a;911352142118求最大值&#xff1a;awk BEGIN {max 0} {if ($10 > max0) max$1} END {print "Max", max} test.txtMax 118求最小值&#xff1a;awk BEGIN {min 65536} {if ($10 < min0) min$1} END {print "Min", min}…

?分布式數據庫技術基礎:數據分布介紹

1、數據分布的定義數據分布是指在分布式環境中通過合理分布數據&#xff0c;提高數據操作自然并行度&#xff0c;以達到最優的執行效率的目的。在構建分布式數據庫系統運行環境時&#xff0c;必須考慮數據如何分布在系統的各個場地上。數據分布主要關注的問題是在分布式數據中&…

uname命令 linux,Linux uname命令詳解

Linux uname命令用于顯示系統信息。uname可顯示電腦以及操作系統的相關信息。語法參數&#xff1a;uname [參數]參數&#xff1a;-a或--all&#xff1a;顯示全部的信息&#xff1b;-m或--machine&#xff1a;顯示電腦類型&#xff1b;-n或-nodename&#xff1a;顯示在網絡上的主…