linux中訊號的種類:
sighup 當終止乙個終端時,核心就把這種訊號傳送給該終端所控制的所有程序.
sigint 當乙個使用者按下中斷鍵(ctrl+c)後,核心就向該終端用關聯的所有程序傳送這個訊號.
sigquit 當使用者按下(ctrl+),核心就向該終端用關聯的所有程序傳送這個訊號.
sigill 當乙個程序企圖執行一條非法指令時,核心就傳送這個訊號.
sigfpe 當產生浮點錯誤時,核心就傳送這個訊號.
sigkill 這是乙個非常特殊的訊號,他可以從乙個程序傳送到另乙個程序,使接收到該訊號的程序終止.核心偶然也傳送這種訊號.
sigalrm 當乙個定時器到時的時候,核心就傳送這個訊號.
sigstop 子程序結束訊號.unix用它來實現系統呼叫exit(),wait();
linux中,可以用signal函式接受上面的各種訊號,並可以指定接受到這些訊號之後的「動作」
#includetypedef void (*sighandler_t)( int )
sighandler_t signal(int signum , sighandler_t handler)
當handler為:
sig_ign 忽略這個訊號.
sig_dfl 恢復對這個訊號的預設處理.
/*
alarm & signal函式
功能:每隔一定的時間就去執行一次相應的操作(catch函式)
*/#include#include#include#includevoid catch(int ) ;
int main()
return 0;
}void catch(int sig)
執行結果:
除此之外,linux還提供了3個內建的計時器:
itimer_real:實時定時器,不管程序在何種模式下執行(甚至在程序被掛起時),它總在計數。定時到達,向程序傳送sigalrm訊號。
itimer_virtual:這個不是實時定時器,當程序在使用者模式(即程式執行時)計算程序執行的時間。定時到達後向該程序傳送sigvtalrm訊號。
itimer_prof:程序在使用者模式(即程式執行時)和核心模式(即程序排程用時)均計數。定時到達產生sigprof訊號。itimer_prof記錄的時間比itimer_virtual多了程序排程所花的時間。
定時器在初始化是,被賦予乙個初始值,隨時間遞減,遞減至0後發出訊號,同時恢復初始值。在任務中,我們可以一種或者全部三種定時器,但同一時刻同一型別的定時器只能使用乙個。
用到的函式有:
#includeint getitimer(int which , struct itimerval *curr_value) ;
int setitimer(int which , struct itimerval *new_value , struct itimerval *old_value);
which是模式,有itimer_real, itimer_virtual. itimer_prof三種模式。
struct itimerval
struct timeval
it_interval用來指定每隔多長時間執行任務, it_value用來儲存當前時間離執行任務還有多長時間。比如說, 你指定it_interval為2秒(微秒為0),開始的時候我們把it_value的時間也設定為2秒(微秒為0),當過了一秒, it_value就減少乙個為1, 再過1秒,則it_value又減少1,變為0,這個時候發出訊號(告訴使用者時間到了,可以執行任務了),並且系統自動把it_value的時間重置為it_interval的值,即2秒,再重新計數。
/*
sample .1 :
linux內建的計時器計時.
*/#include#include#include#include/*訊號處理函式*/
static void sighandler(int signo) ;
/*訊號處理中的輔助函式*/
void timepassed(struct itimerval *itimer , struct timeval *tv) ;
void kernel_time(struct timeval *itimer1, struct timeval *itimer2 , struct timeval *tv ) ;
int main(int argc, char **argv)
return 0;
}/*訊號處理函式*/
void sighandler(int sig)
}/*求兩個時間的時間差*/
void timepassed(struct itimerval *itimer, struct timeval *tv)
tv->tv_sec = temp1.tv_sec - temp2.tv_sec ;
tv->tv_usec = temp1.tv_usec - temp2.tv_usec ;
}/*計算核心的時間,即程序排程的時間*/
void kernel_time(struct timeval *it1, struct timeval *it2 , struct timeval *tv)
tv->tv_sec = it1->tv_sec - it2->tv_sec ;
tv->tv_usec = it1->tv_usec - it2->tv_usec ;
}
執行結果:
/*
sample .2
linux 系統內建計時器
*/#include#include#include#include#include#includevoid cal(int sig)
return ;
}int main(int argc, char **argv)
python計時器 python 計時器
import sysclassshowtime qwidget def init self super init self.istimestart false 標記時間是否開始計時 self.setwindowtitle qlable 顯示計時時間 self.lable time val qlabe...
python計時器單位 python計時器類
import time as t class mytimer def init self self.unit 年 月 日 時 分 秒 self.prompt 未開始計時 self.lasted self.start 0 self.stop 0 def str self return self.pro...
伺服器計時器與 Windows 計時器
說明 此文大部分內容摘自msdn,本人只是做了一點整理。如果有什麼異議,一切以msdn為準。一 引言 在 visual studio net 中有兩種計時器控制項 基於伺服器的計時器和標準的基於 windows 的計時器。基於 windows 的計時器為在 windows 窗體應用程式中使用而進行了...