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核心定時器Linux定時器
- Linux alarm signal (SIGALRM) to detach process isAliveLinux
- 【linux】驅動-15-定時器Linux定時器
- 雲伺服器Linux系統設定時間同步設定伺服器Linux
- Service Alarm Platform 介紹Platform
- 定時器以及定時器的幾個案例定時器
- Linux 定時任務Linux
- Linux | 定時任務Linux
- 鬧鐘和時間管理工具:Alarm Clock Pro for macMac
- JavaScript定時器JavaScript定時器
- iOS定時器iOS定時器
- Timer(定時器)定時器
- JavaScript 定時器JavaScript定時器
- js定時器JS定時器
- python定時器Python定時器
- linux啟定時指令碼Linux指令碼
- Linux crontab 定時任務Linux
- 如何在linux使用crontab命令定時重啟伺服器Linux伺服器
- 命令定時重啟伺服器如何在linux使用crontab伺服器Linux
- 純生JS輪播,定時器新增和清除定時器JS定時器
- JMeter—定時器(八)JMeter定時器
- Flink onTimer定時器定時器
- Qt - QTimer(定時器)QT定時器
- python flask 定時器PythonFlask定時器
- TIM-定時器定時器
- Java - Timer定時器Java定時器
- Systemd 定時器教程定時器
- java 中定時器Java定時器
- Qt QTimer定時器QT定時器
- linux定時任務cron配置Linux
- linux系統時間設定Linux
- Linux 定時任務排程Linux
- Linux下chrony對時設定Linux
- Linux設定系統時間Linux
- Linux設定和修改時間與時區Linux
- GO的定時器Timer 和定時任務cronGo定時器
- linux定時任務的設定 crontab 配置指南Linux
- JavaScript6:定時器JavaScript定時器
- 5.9 jmeter元件-定時器JMeter元件定時器