定时器的简单实现即回调函数的运用
2015-08-17 19:10
295 查看
这两天在 研究回调函数就想实现简单的定时器,以下是鄙人的程序望指教。
#include <iostream>
#include <ctime>
using namespace std;
#define MAXNUM 256
typedef void (*timerProcessFunc)(void*);
typedef struct
{
unsigned int id;
int timeout; //毫秒
}MyTimer;
static MyTimer timerList[MAXNUM] = {0};
int initTimer(MyTimer* timer, int timeout)
{
if(!timer || timeout < 0) return false;
timer->timeout = timeout;
for(int i = 0; i < MAXNUM; i++)
{
if(timerList[i].id == 0)
{
timer->id = i;
timerList[i] = *timer;
return i;
}
}
return -1;
}
void timerProcess(void* userPara) //回调函数
{
cout << "定时了" << *(double*)userPara << "毫秒" << endl;
}
void startTimer(int timerID, timerProcessFunc timerapp)
{
clock_t start,finish;
double totaltime;
start = clock();
/**********计时开始*****************/
while(1)
{
finish = clock();
totaltime = (double)(finish-start);
if(totaltime >= timerList[timerID].timeout)
{
timerapp(&totaltime);
break;
}
}
/********************************/
}
void killTimer(int timerID)
{
timerList[timerID].id = 0;
timerList[timerID].timeout = 0;
}
int main()
{
MyTimer t;
int id;
if((id = initTimer(&t, 10000)) != -1)
startTimer(id, timerProcess);
return 0;
}
这两天在 研究回调函数就想实现简单的定时器,以下是鄙人的程序望指教。
#include <iostream>
#include <ctime>
using namespace std;
#define MAXNUM 256
typedef void (*timerProcessFunc)(void*);
typedef struct
{
unsigned int id;
int timeout; //毫秒
}MyTimer;
static MyTimer timerList[MAXNUM] = {0};
int initTimer(MyTimer* timer, int timeout)
{
if(!timer || timeout < 0) return false;
timer->timeout = timeout;
for(int i = 0; i < MAXNUM; i++)
{
if(timerList[i].id == 0)
{
timer->id = i;
timerList[i] = *timer;
return i;
}
}
return -1;
}
void timerProcess(void* userPara) //回调函数
{
cout << "定时了" << *(double*)userPara << "毫秒" << endl;
}
void startTimer(int timerID, timerProcessFunc timerapp)
{
clock_t start,finish;
double totaltime;
start = clock();
/**********计时开始*****************/
while(1)
{
finish = clock();
totaltime = (double)(finish-start);
if(totaltime >= timerList[timerID].timeout)
{
timerapp(&totaltime);
break;
}
}
/********************************/
}
void killTimer(int timerID)
{
timerList[timerID].id = 0;
timerList[timerID].timeout = 0;
}
int main()
{
MyTimer t;
int id;
if((id = initTimer(&t, 10000)) != -1)
startTimer(id, timerProcess);
return 0;
}
相关文章推荐
- Mootools 1.2教程 定时器和哈希简介
- C#定时器和随机数
- C#中timer定时器用法实例
- C#中异步回调函数用法实例
- 浅谈javascript回调函数
- JS中自定义定时器让它在某一时刻执行
- 告诉你什么是javascript的回调函数
- 理解javascript回调函数
- JavaScript定时器详解及实例
- jQuery Tips 为AJAX回调函数传递额外参数的方法
- 解决ajax回调函数返回的字符串乱码问题
- ajax请求返回的数据看不到回调函数没有执行也没报错
- Qt定时器和随机数详解
- asp.net中Timer无刷新定时器的实现方法
- 在c和c++中实现函数回调
- 关于javascript 回调函数中变量作用域的讨论
- libevent库的使用--定时器的使用实例
- MySQL定时器EVENT学习笔记
- PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
- js函数定时器实现定时读取系统实时连接数