linux 定时器超时不准,linux的定时器实现问题__include_超时_g_timerStartFlag_libck_createTimerAndStart_get_time__169IT.C...

大家好,我想实现这样的定时器:

1,可以随时的开启,

2,可是随时的关闭,

3,等开启后如果超时了则调用我的超时处理函数!

我的实现思路是这样的:

创建一个线程,让他一直循环,用一个标志位检测退出,在循环体中不断的读取系统时间,根据系统时间差来计算是否超时,等超时了,调用超时处理函数。

代码如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

int g_timerStartFlag;

inline unsigned long get_time()  ///return ms;

{

struct timeval tv = {0};

gettimeofday(&tv, 0);

return tv.tv_sec*1000+tv.tv_usec/1000;

}

int count;

void *createTimer(void *arg)

{

int timecnt=0;

pthread_detach(pthread_self());

unsigned long lasttime=get_time();

while(g_timerStartFlag)   ///

{

unsigned long nowtime;

nowtime=get_time();

if(nowtime-lasttime>=500)  ///500ms

{

printf("timeout------n");

lasttime = nowtime;

}

}

fprintf(stderr,"break;");

return NULL;

}

void libck_createTimerAndStart(void)

{

pthread_t timeid;

g_timerStartFlag=1;

pthread_create(&timeid, NULL, &createTimer, NULL);  

}

int main()

{

int i;

libck_createTimerAndStart();

while(1)

{

for(i=0;i

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 定时器 `timer_list` 是内核中用于管理定时器的数据结构之一。它是一个双向链表,包含了所有当前运行的定时器。 在 Linux 内核中,定时器是通过 `struct timer_list` 结构体来表示的。它包含了定时器的各种属性,如定时器超时时间、回调函数、私有数据等。 `timer_list` 数据结构被定义在 `<linux/timer.h>` 头文件中,其定义如下: ```c struct timer_list { struct list_head entry; unsigned long expires; void (*function)(unsigned long); unsigned long data; #ifdef CONFIG_TIMER_STATS void *start_site; char start_comm[16]; int start_pid; #endif }; ``` 其中,`entry` 是双向链表的节点,用于将定时器添加到 `timer_list` 中。`expires` 字段记录了定时器超时时间,以 jiffies 单位表示。`function` 是定时器超时时要执行的回调函数,`data` 则是传递给回调函数的参数。 要使用 `timer_list`,需要先声明一个 `struct timer_list` 类型的变量,并进行初始化。然后可以使用 `init_timer()` 函数来初始化定时器,并使用 `add_timer()` 函数将定时器添加到 `timer_list` 中。当定时器超时时,内核会自动调用指定的回调函数。 需要注意的是,在使用定时器后,应在不需要时及时删除或停止它们,以避免资源浪费或不正确的行为。 这就是关于 Linux 定时器 `timer_list` 的简要介绍,希望能对你有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值