Linux中的定时器(timer)是一种用于在特定时间点或周期性执行任务的机制。定时器在Linux内核和用户空间程序中都有广泛的应用,例如任务调度、超时处理、周期性事件等。
内核级定时器主要用于内核模块和驱动程序中。
#include <linux/timer.h>
struct timer_list my_timer;
void my_timer_callback(struct timer_list *timer) {
// 定时器到期时执行的代码
}
void setup_timer(void) {
init_timer(&my_timer);
my_timer.function = my_timer_callback;
my_timer.expires = jiffies + msecs_to_jiffies(1000); // 1秒后到期
add_timer(&my_timer);
}
void stop_timer(void) {
del_timer(&my_timer);
}
用户空间程序可以使用timerfd
或pthread
库来实现定时器。
timerfd
#include <sys/timerfd.h>
#include <unistd.h>
#include <stdio.h>
int main() {
int tfd = timerfd_create(CLOCK_REALTIME, 0);
if (tfd == -1) {
perror("timerfd_create");
return 1;
}
struct itimerspec its;
its.it_value.tv_sec = 1; // 初始到期时间1秒
its.it_value.tv_nsec = 0;
its.it_interval.tv_sec = 1; // 周期性间隔1秒
its.it_interval.tv_nsec = 0;
if (timerfd_settime(tfd, 0, &its, NULL) == -1) {
perror("timerfd_settime");
close(tfd);
return 1;
}
uint64_t expirations;
read(tfd, &expirations, sizeof(expirations));
printf("Timer expired %lu times\n", expirations);
close(tfd);
return 0;
}
pthread
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
void* timer_thread(void* arg) {
sleep(1); // 延迟1秒
printf("Timer expired\n");
return NULL;
}
int main() {
pthread_t thread;
if (pthread_create(&thread, NULL, timer_thread, NULL) != 0) {
perror("pthread_create");
return 1;
}
pthread_join(thread, NULL);
return 0;
}
CLOCK_MONOTONIC
),并尽量减少定时器回调函数的执行时间。del_timer
或timerfd_close
来删除定时器。通过以上方法,可以有效管理和优化Linux中的定时器使用,确保系统的稳定性和性能。
领取专属 10元无门槛券
手把手带您无忧上云