使用 sigaction 函式:
signal 函式的使用方法簡單,但並不屬於 posix 標準,在各類 unix 平台上的實現不盡相同,因此其用途受
到了一定的限制。而 posix 標準定義的訊號處理介面是 sigaction 函式,其介面標頭檔案及原型如下:
#include int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
◆ signum:要操作的訊號。
◆ act:要設定的對訊號的新處理方式。
◆ oldact:原來對訊號的處理方式。
◆ 返回值:0 表示成功,-1 表示有錯誤發生。
struct sigaction 型別用來描述對訊號的處理,定義如下:
struct sigaction
;
在這個結構體中,成員 sa_handler 是乙個函式指標,其含義與 signal 函式中的訊號處理函式類似。成員
sa_sigaction 則是另乙個訊號處理函式,它有三個引數,可以獲得關於訊號的更詳細的資訊。當 sa_flags 成員的值
包含了 sa_siginfo 標誌時,系統將使用 sa_sigaction 函式作為訊號處理函式,否則使用 sa_handler 作為訊號處理
函式。在某些系統中,成員 sa_handler 與 sa_sigaction 被放在聯合體中,因此使用時不要同時設定。
sa_mask 成員用來指定在訊號處理函式執行期間需要被遮蔽的訊號,特別是當某個訊號被處理時,它自身會被
自動放入程序的訊號掩碼,因此在訊號處理函式執行期間這個訊號不會再度發生。
sa_flags 成員用於指定訊號處理的行為,它可以是一下值的「按位或」組合。
◆ sa_restart:使被訊號打斷的系統呼叫自動重新發起。
◆ sa_nocldstop:使父程序在它的子程序暫停或繼續執行時不會收到 sigchld 訊號。
◆ sa_nocldwait:使父程序在它的子程序退出時不會收到 sigchld 訊號,這時子程序如果退出也不會成為僵
屍程序。
◆ sa_nodefer:使對訊號的遮蔽無效,即在訊號處理函式執行期間仍能發出這個訊號。
◆ sa_resethand:訊號處理之後重新設定為預設的處理方式。
◆ sa_siginfo:使用 sa_sigaction 成員而不是 sa_handler 作為訊號處理函式。
re_restorer 成員則是乙個已經廢棄的資料域,不要使用。
下面用乙個例程來說明 sigaction 函式的使用,**如下:
#include #include #include #include static void sig_usr(int signum)
else if(signum == sigusr2)
else
}int main(void)
}else
}return 0;
}
在這個例程中使用 sigaction 函式為 sigusr1 和 sigusr2 訊號註冊了處理函式,然後從標準輸入讀入字元
。程式執行後首先輸出自己的 pid,如:
my pid is 5904
這時如果從另外乙個終端向程序傳送 sigusr1 或 sigusr2 訊號,用類似如下的命令:
kill -usr1 5904
則程式將繼續輸出如下內容:
sigusr1 received
read is interrupted by signal
這說明用 sigaction 註冊訊號處理函式時,不會自動重新發起被訊號打斷的系統呼叫。如果需要自動重新發
起,則要設定 sa_restart 標誌,比如在上述例程中可以進行類似一下的設定:
sa_usr.sa_flags = sa_restart;
pthread kill向子程序傳送訊號函式
pthread kill 別被名字嚇到,pthread kill可不是kill,而是向執行緒傳送signal。還記得signal嗎,大部分signal的預設動作是終止程序的執行,所以,我們才要用signal 去抓訊號並加上處理函式。int pthread kill pthread t thread,...
WaitForSingleObject函式的使用
程式舉例 1 建立對話方塊應用程式,專案名稱為mytestthread 2 新增按鈕,命名為啟動和停止,在對話方塊中增加編輯框,id為idc time,3 增加成員變數,handle m hthread 2 此為執行緒的控制代碼 4 定義全域性變數,用來控制線程的執行與否 volatile bool...
cvCreateVideoWriter函式使用
cvcreatevideowriter函式使用 2011 11 04 15 47 例如,cv fourcc p i m 1 是mpeg 1 codec,cv fourcc m j p g 是motion jpeg codec cv fourcc m p 4 2 mpeg 4.2 codec cv f...