资源简介
win32、c语言、详细注释、个人理解、思维导图
代码片段和文件信息
#include “stdafx.h“
#include “cMyTimer.h“
#include “process.h“ //多线程需要的头文件
/*******************************全局函数*********************************/
void CallBack_TimerProc(void* p) //定时器线程的回调函数
{//不停的运行定时器控制函数控制定时器运行
cMyTimer* pTimer=(cMyTimer*)p; //获取当前cMyTimer的类对象指针
if(pTimer==NULL)
{
return;
}
while(1) //不停的运行定时器控制函数
{
//检测、删除bDel状态为TRUE的定时器
pTimer->CheckDelTimer();
if(!pTimer->TimerCtrlRun()) //如果定时器运行失败就退出线程
{
_endthread();//删除线程
return;
}
Sleep(20); //睡眠20ms
}
}
/************************************************************************/
/****************************cMyTimer成员函数******************************/
cMyTimer::cMyTimer()
{
}
cMyTimer::~cMyTimer()
{
}
void cMyTimer::AddTimer(unsigned timerIDunsigned timeElapseint iParamstring strParam)
{//添加定时器,启动定时器线程
if(timeElapse==0)
{//如果定时器时间间隔为0,直接返回
return;
}
//通过传入参数,构造一个定时器数据
stTimer stTimerTemp; //定时器结构体
stTimerTemp.timerID=timerID;
stTimerTemp.timeElapse=timeElapse;
stTimerTemp.iParam=iParam;
stTimerTemp.strParam=strParam;
stTimerTemp.timeLastRun=::GetTickCount(); //当前时间(相对的不是绝对的哦)
//将构造的定时器加入到定时器列表中
m_listTimer.push_back(stTimerTemp);
//如果是第一个定时器就创建一个新的线程,其它的都跟第一个共一个线程,无需新建线程。
if(m_listTimer.size()==1)
{
//第一参数:是线程的回调函数,第三个参数:是回调函数的参数
_beginthread(CallBack_TimerProc0this); //创建定时器线程以用来运行定时器
}
}
bool cMyTimer::TimerCtrlRun()
{//判断、控制定时器的运行
if(m_listTimer.size()==0)
{//定时器列表为空,即没有定时器时
return false;
}
//判断、运行定时器。
unsigned timeNow=GetTickCount(); //获取当前时间
itListTimer it=m_listTimer.begin(); //定义定时器列表迭代器
for( ; it!=m_listTimer.end();it++) //遍历每个定时器,
{
//比较定时器上次运行的时间和当前时间差是否大于等于timeElapse
if((timeNow-it->timeLastRun) >= it->timeElapse)
{//如果大于,就运行定时器;如果小于就不运行。
it->timeLastRun = timeNow;
unsigned ret=OnTimer(it->timerIDit->iParamit->strParam);
//如果OnTimer()返回0,执行完这次后销毁该定时器。
if(ret==0)
{
//改变定时器的销毁状态为true
it->bDel=true;
}
/*else if(ret>1000)
{//根据定时器返回值修改定时器间隔
it->timeElapse=ret;
}*/
}
}
return true;
}
void cMyTimer::CheckDelTimer()
{//检测、删除bDel状态为TRUE的定时器
itListTimer it=m_listTimer.begin();
for( ;it!=m_listTimer.end(); )
{
if(it->bDel)
{
it=m_listTimer.erase(it);//删除定时器
continue;
}
it++;
}
}
void cMyTimer::DeletTimer(unsigned timerID)
{
itListTimer it=m_listTimer.begin();
for( ;it!=m_listTimer.end(); it++)
{
if(it->timerID==timerID)
{
it->bDel=true;
return;
}
}
}
/************************************************************************/
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-02-12 15:19 RunningMan\
目录 0 2017-02-10 12:26 RunningMan\Debug\
目录 0 2017-02-06 08:12 RunningMan\Debug\images\
文件 13734 2015-12-08 16:06 RunningMan\Debug\images\ba
文件 615478 2015-12-06 15:32 RunningMan\Debug\images\bg.bmp
文件 13366 2015-12-08 15:43 RunningMan\Debug\images\gold.bmp
文件 57462 2015-12-08 15:10 RunningMan\Debug\images\pla
文件 56910 2015-12-08 11:21 RunningMan\Debug\images\pla
文件 57462 2015-12-08 15:10 RunningMan\Debug\images\pla
文件 57462 2015-12-08 15:11 RunningMan\Debug\images\pla
文件 57462 2015-12-08 15:11 RunningMan\Debug\images\pla
文件 57462 2015-12-08 11:03 RunningMan\Debug\images\pla
文件 57462 2015-12-08 11:04 RunningMan\Debug\images\pla
文件 57462 2015-12-08 11:05 RunningMan\Debug\images\pla
文件 57462 2015-12-08 11:05 RunningMan\Debug\images\pla
文件 57462 2015-12-08 11:05 RunningMan\Debug\images\pla
文件 57462 2015-12-08 11:05 RunningMan\Debug\images\pla
文件 57462 2015-12-08 15:20 RunningMan\Debug\images\pla
文件 76934 2015-12-08 15:29 RunningMan\Debug\images\post.bmp
文件 134144 2017-02-10 13:10 RunningMan\Debug\RunningMan.exe
文件 1160368 2017-02-10 13:10 RunningMan\Debug\RunningMan.ilk
文件 2461696 2017-02-10 13:10 RunningMan\Debug\RunningMan.pdb
目录 0 2017-02-05 20:53 RunningMan\ipch\
目录 0 2017-02-05 20:53 RunningMan\ipch\runningman-7a3e600d\
文件 20578304 2017-02-10 12:40 RunningMan\ipch\runningman-7a3e600d\runningman-d3012be9.ipch
目录 0 2017-02-10 13:10 RunningMan\RunningMan\
文件 33226752 2017-02-10 13:14 RunningMan\RunningMan.sdf
文件 976 2017-02-05 20:53 RunningMan\RunningMan.sln
文件 30208 2017-02-10 13:14 RunningMan\RunningMan.v12.suo
文件 3051 2016-12-01 18:28 RunningMan\RunningMan\cMyTimer.cpp
文件 2015 2016-12-03 10:55 RunningMan\RunningMan\cMyTimer.h
............此处省略54个文件信息
- 上一篇:C++ MFC实现计算器基本功能
- 下一篇:基于VLC的MFC播放器
相关资源
- 基于VLC的MFC播放器
- C++ MFC实现计算器基本功能
- TCPSocket摄像头实时传输视频和图片传
- 初步实现ATM机MFC、 实现ATM系统
- Visual C++角色扮演游戏程序设计电子书
- 嵌入式系统高级C语言编程.凌明(带详
- Visual C++ 2015 Redistributable Packages.(x6
- C++实现的人脸识别系统
- 传智播客 c/c++ 课件
- Visual C++ for Linux Development
- 大鱼吃小鱼C++课设funcode平台
-
深度探索C.对象模型]Inside The C++ ob
- 杨淑英VC++图像处理程序设计配套光盘
- C++ primer 6th Edition.pdf
- 简单视频摘要系统的设计与实现
- Visual_C++_MATLAB图像处理与识别实用案例
- C/C++/STL参考手册MSDN版本2018
- C++课程设计学生选课系统+报告文档
- Thinking in C++ 中文版PDF版 很爽哦
- Pascal转C++
- Microsoft Visual C++ 2017 Redistributable (x
- Microsoft Visual C++ 2017 Redistributable (x
- C++ GUI Programming with Qt 4 Second Edition.c
- c++调用摄像头,vs2010编译通过。
- c++ 标准库第二版《英文版》高清 带书
- PJSIP---可以视频通话的库 c++
- cygnus c++ 2.91.57 for windows
- Visual C++/MATLAB图像处理与识别实用案例
- WFQ算法实现c/c++
- 黑马扫地僧C\\C++\\数据结构\\算法\\设
评论
共有 条评论