C言語のタイマー処理をプログラミングする
C言語ではヘッダファイル内のタイマー関連の関数を用いて、タイマー処理プログラムを作成できる。以下に簡単な例を示す。
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void timer_handler(int signum) {
printf("Timer expired!\n");
}
int main() {
struct sigaction sa;
struct itimerval timer;
// 为定时器信号设置处理函数
sa.sa_handler = timer_handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
sigaction(SIGALRM, &sa, NULL);
// 设置定时器时间间隔
timer.it_value.tv_sec = 1; // 初始超时时间为1秒
timer.it_value.tv_usec = 0;
timer.it_interval.tv_sec = 1; // 定时器周期为1秒
timer.it_interval.tv_usec = 0;
// 启动定时器
setitimer(ITIMER_REAL, &timer, NULL);
// 等待定时器信号
while(1) {
sleep(1);
}
return 0;
}
最初にtimer_handlerという関数を定義し、タイマーのタイムアウトシグナルを処理する。次に、sigaction関数を使用して、タイマーシグナル SIGALRMへの処理関数を設定する。続いて、itimerval構造体を使用してタイマーのタイムアウト時間と周期を設定する。ここでは、タイムアウト時間は1秒、周期も1秒に設定している。最後に、setitimer関数を使用してタイマーを起動する。そして、無限ループへ入り、タイマーシグナルが到来するのを待つ。タイマーがタイムアウトするたびに、timer_handler関数が呼び出され、「Timer expired!」というメッセージが出力される。
タイマーのタイムアウト時間とハンドラ関数を、具体的な用途に合わせてニーズに応じてカスタマイズすることが可能です。