Linux下定时器的示例代码

原创 2007年10月15日 09:55:00
Linux下定时器的问题

示例代码:

#include <iostream>
using namespace std;
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/stat.h>
#include <string.h>
#include <time.h>

#define SIGMYTIMER (SIGRTMAX)

int SetTimer(int nElaspe , int nMode = 1);
void TimerRoutine(int signo, siginfo_t* info, void* context);

int main()
{
cout<<"proc id: "<<(long)getpid()<<" main thread id:"<<pthread_self()<<endl;

struct sigaction sysact;

//setup signal handler
sigemptyset(&sysact.sa_mask);
sysact.sa_flags = SA_SIGINFO;
sysact.sa_sigaction = TimerRoutine ;
sigaction(SIGMYTIMER, &sysact, NULL);

SetTimer(500);
SetTimer(500);
SetTimer(500);

while(1)
{
sleep(1);
}
cout<<"quit!!!!"<<endl;
return 0;
}

timer_t IDList[20]; //use to save timer id;

//mode: 0: oneshot timer; 1: periodicity timer
int SetTimer(int nElaspe, int nMode)
{
struct sigevent evp;

static int nTimerIndex = 0;

evp.sigev_notify = SIGEV_SIGNAL;
evp.sigev_signo = SIGMYTIMER;
evp.sigev_value.sival_ptr = &IDList[nTimerIndex];
int nCreate = timer_create(CLOCK_REALTIME, &evp, &IDList[nTimerIndex]);

if (nCreate == 0) //success
{
struct itimerspec value;
struct itimerspec ovalue;

value.it_value.tv_sec = nElaspe / 1000;
value.it_value.tv_nsec = (nElaspe % 1000) * (1000 * 1000);

if (nMode == 1)
{
value.it_interval.tv_sec = value.it_value.tv_sec;
value.it_interval.tv_nsec = value.it_value.tv_nsec;
}
else
{
value.it_interval.tv_sec = 0;
value.it_interval.tv_nsec = 0;
}

if (timer_settime(IDList[nTimerIndex], 0, &value, &ovalue) == 0) //success
{
cout<<"Timer id:"<<IDList[nTimerIndex]<<" nElaspe:"<<nElaspe<<endl;
}
}
else
{
cout<<"create timer error"<<endl;
}

//++nTimerIndex;
return IDList[nTimerIndex++];
}

//timer singal proc
void TimerRoutine(int signo, siginfo_t* info, void* context)
{
if (signo != SIGMYTIMER) return;

//display time
time_t currtime;
time(&currtime);
tm* pTm = localtime(&currtime);
if (pTm)
{
char sBuf[30];
sprintf(sBuf, "%02d:%02d:%02d", pTm->tm_hour, pTm->tm_min, pTm->tm_sec);
cout<<sBuf;
}

cout<<" timer_id:"<<*(int*)(info->si_value.sival_ptr)<<" sig_id:"<<signo<<" thread_id:"<<pthread_self()<<endl;
}

编译:

librt是一个系统库,你不必管他的路径(在usr/lib中),在编译时记得连接就行了。

g++ -o demo demo.cpp -lrt
 

linux使用定时器回调函数示例

liunx使用setitimer()函数设置定时器,一定间隔后触发回调函数。#include #include #include #include #include void timer_ha...
  • ktigerhero3
  • ktigerhero3
  • 2017-03-30 15:44:08
  • 1792

Linux应用层的定时器Timer使用详解

linux下定时器的使用 -- alarm() & setitimer(): 1、alarm -------------------------------------------     如果...
  • wwwtovvv
  • wwwtovvv
  • 2013-02-22 10:40:37
  • 3922

linux内核定时器驱动一个简单例子

linux内核定时器  A 使用步骤: 1 定义定时器结构体变量 struct  timer_list    timer; 2  初始化内核定时器 init_timer(struct  t...
  • u012590688
  • u012590688
  • 2015-05-28 19:52:17
  • 1358

Linux网络编程--定时器的学习和使用

linux网络编程需要处理的重要事件之一--定时事件,对于服务器而言,管理着众多的客户端连接,高效稳定的管理这些客户端,定时事件是必不可少的,也对服务器的性能有着至关重要的作用。本博文先介绍简单的定时...
  • u010193457
  • u010193457
  • 2016-03-10 14:25:52
  • 1143

linux下的多定时器实现

  • 2010年08月25日 01:05
  • 3KB
  • 下载

Linux定时器的实现

Linux定时器的实现  #include #include #include #include #include int count = 0; void set_timer() {    ...
  • johnping
  • johnping
  • 2008-02-28 18:42:00
  • 9305

linux下c/c++实例之六时间测试和定时器

Linux中使用sleep会导致程序一直阻塞,无法交互,同时sleep和usleep有时也不精确,在此总结linux下的部分时间操作。...
  • taiyang1987912
  • taiyang1987912
  • 2015-11-09 09:56:14
  • 4555

内核定时器的使用(好几个例子add_timer)

LINUX内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,其实现位于 和 kernel/timer.c 文件中。 被调度的函数肯定是异步执行的,它类似...
  • yangguangmeng
  • yangguangmeng
  • 2014-04-08 11:10:13
  • 1486

linux定时器编程详解(包含代码)

  • 2012年11月08日 11:29
  • 70KB
  • 下载

Linux之时钟中断

from:深入分析Linux内核源码(http://oss.org.cn/kernel-book/)  时钟中断的产生      Linux的OS时钟的物理产生原因是可编程定时/计数器产生的输出脉...
  • wdzxl198
  • wdzxl198
  • 2013-05-02 10:41:13
  • 8691
收藏助手
不良信息举报
您举报文章: Linux下定时器的示例代码
举报原因:
原因补充:

(最多只允许输入30个字)