Linux 定時器alarm()
系統中的每個程式都有一個私有的鬧鐘。這個鬧鐘很像一個計時器,可以設定在一定秒數後鬧鐘。時間一到,時鐘就傳送一個訊號SIGALRM到程式。
函式原型:unsigned int alarm(unsigned int seconds);
標頭檔案:#include<unistd.h>
函式說明:alarm()用來設定訊號SIGALRM在經過引數seconds指定的秒數後,傳送給目前的程式。如果引數seconds為0,則之前設定的鬧鐘會被取消,並將剩下的時間返回。
返回值:如果呼叫此alarm()前,程式已經設定了鬧鐘時間,則返回上一個鬧鐘時間的剩餘時間,否則返回0。 出錯返回-1。
例1:
int main(int argc, char *argv[])
{
unsigned int timeleft;
printf( "Set the alarm and sleep\n" );
alarm( 10 );
sleep( 5 );
timeleft = alarm( 0 ); //獲得上一個鬧鐘的剩餘時間:5秒
printf( "\Time left before cancel, and rearm:%d\n", timeleft );
alarm( timeleft );
printf( "\Hanging around, waiting to die\n");
pause(); //讓程式暫停直到訊號出現
return EXIT_SUCCESS;
}
執行結果:
首先打印 Set the alarm and sleep
5秒後列印 Time left before cancel, andrearm: 5
Hanging around, waiting to die
再經過5秒,程式結束
例2:
static voidtimer(int sig)
{
static int count=0;
count++;
printf("\ncount = %d\n", count);
if(sig ==SIGALRM)
{
printf("timer\n");
}
signal(SIGALRM, timer);
alarm(1);
if (count == 5)
alarm(0);
return;
}
int main(int argc,char *argv[])
{
signal(SIGALRM, timer);
alarm(1);
while(1);
}
除非程式為SIGALRM設定了處理函式,否則訊號將殺死這個程式。比較下例中signal(SIGALRM,wakeup);語句開啟與關閉的區別。
例3:
void wakeup()
{
printf("Wake Up!\n");
}
void main(int argc,char *argv[])
{
printf("sleep 3 seconds!\n");
//signal(SIGALRM, wakeup);
alarm(3);
pause();
printf("Waken!\n");
}
計時器的另一個用途是排程一個在將來的某個時刻發生的動作同時做些其他事情。排程一個將要發生的動作很簡單,通過呼叫alarm來設定計時器,然後繼續做別的事情。當計時器計時到0時,訊號傳送,處理函式被呼叫。
相關文章
- Linux下開發-alarmLinux
- Linux核心定時器Linux定時器
- 關於linux下定時器,多定時器Linux定時器
- 【linux】驅動-15-定時器Linux定時器
- 定時器定時器
- 定時器以及定時器的幾個案例定時器
- Linux alarm signal (SIGALRM) to detach process isAliveLinux
- linux下使用TCP存活(keepalive)定時器LinuxTCP定時器
- iOS定時器iOS定時器
- JavaScript定時器JavaScript定時器
- js定時器JS定時器
- JavaScript 定時器JavaScript定時器
- 核心定時器定時器
- 雲伺服器Linux系統設定時間同步設定伺服器Linux
- linux下多定時器的實現(經典)Linux定時器
- Linux應用層的定時器TimerLinux定時器
- Linux裝置驅動之中斷與定時器Linux定時器
- 鬧鐘和時間管理工具:Alarm Clock Pro for macMac
- 純生JS輪播,定時器新增和清除定時器JS定時器
- Service Alarm Platform 介紹Platform
- alarm() (鬧鐘函式)函式
- signal raise alarm用法AI
- C語言alarm()函式:設定訊號傳送鬧鐘C語言函式
- 【Linux】linux時區設定Linux
- java 中定時器Java定時器
- python定時器Python定時器
- Systemd 定時器教程定時器
- JMeter—定時器(八)JMeter定時器
- 關於定時器定時器
- Go 的定時器Go定時器
- Python 定時器Python定時器
- android定時器Android定時器
- 閉包、定時器定時器
- jmeter(七)定時器JMeter定時器
- 整理:java定時器。Java定時器
- Android 定時器Android定時器
- JavaScript定時器演示JavaScript定時器
- TIM-定時器定時器