标签:hand res 停止 内容 out lrm safe highlight 标识
struct timer_list { struct list_head list; unsigned long expires; unsigned long data; void (*function)(unsigned long); };
list 实现的时候使用的,和定时器功能无关
expires 是定时器定时的滴答数(当前的滴答数为 jiffies )
function 到那个时刻内核调用的函数
data 由于可能多个定时器调用一个函数,为了使得这个函数能够区分不同的定时器,
通过在结构中 data 来标识这个定时器,并且通过调用
function( data )
使得 function 能区分它们,也就是 data 起到 ID 的作用。
如何使用
将定时器加到定时器队列中
void add_timer(struct timer_list *timer)
修改定时器的到期时间
int mod_timer(struct timer_list *timer, unsigned long expires)
将定时器删除(以后这个定时器将不再起作用)
int del_timer(struct timer_list * timer)
#include <stdio.h> #include <unistd.h> #include <signal.h> void sigalrm_fn(int sig) { printf("alarm!\n"); alarm(2); return; } int main(void) { signal(SIGALRM,signalrm_fn); alarm(2); while(1) pause(); }
#include <stdio.h> #include <time.h> #include <sys/time.h> #include <stdlib.h> #include <signal.h> int count = 0; void set_timer() { struct itimerval itv, oldtv; itv.it_interval.tv_sec = 5; itv.it_interval.tv_usec = 0; itv.it_value.tv_sec = 5; itv.it_value.tv_usec = 0; setitimer(ITIMER_REAL, &itv, &oldtv); } void sigalrm_handler(int sig) { count++; printf("timer signal.. %d\n", count); } int main() { signal(SIGALRM, sigalrm_handler); set_timer(); while (count < 1000) {} exit(0); }
Server:: Server(QWidget *parent) : QWidget(parent) { readTimer = new QTimer(this); //创建并启动定时器 connect(readTimer, SIGNAL(timeout()), this, SLOT(slotReadFile())); //每当定时器超时时调用函数slotReadFile读取文件 readTimer->start(100); }
int Server::slotReadFile() // 消息读取和处理函数 { readTimer->stop(); //暂时停止定时器计时 ret = read(file, buf ); //读取文件 if(ret == NULL) { readTimer->start(100); //当没有新消息时,重新启动定时器 return(-1); } else 根据buf中的内容将消息分发给各个相应的对象处理……; readTimer->start(100); //重新启动定时器 }
标签:hand res 停止 内容 out lrm safe highlight 标识
原文地址:https://www.cnblogs.com/wuyepeng/p/9788889.html