.h

#ifndef _Timer_Task_
#define _Timer_Task_ #pragma once #include <ace/Task.h>
#include <ace/Singleton.h>
#include <ace/Null_Mutex.h>
//#include <ace/OS_NS_Thread.h> typedef int (*pfnTimerTriggerEvent)(void *pContext); class TimerTask : public ACE_Task_Base
{
friend class ACE_Singleton<TimerTask, ACE_Null_Mutex>;
public:
TimerTask(void);
~TimerTask(void); public:
virtual int svc (); public:
int Start(pfnTimerTriggerEvent pTriggerEvent, void* pContext = NULL);
int Stop();
/* Seconds */
int ResetTimer(int nElapsedInterval); public:
int m_nElapsedInterval; private:
bool m_bStop;
ACE_event_t m_hResetEvent; private:
pfnTimerTriggerEvent m_pTriggerEvent;
void *m_pContext;
};
typedef ACE_Singleton<TimerTask, ACE_Null_Mutex> TimerTaskSingleton;
#define TIMERTASK TimerTaskSingleton::instance() #endif //_Timer_Task_

.cpp

#include "TimerTask.h"
//#include <ace/Thread_Manager.h>
//#include <ace/Time_Value.h> TimerTask::TimerTask(void)
: m_bStop(true),
m_pContext(NULL),
m_pTriggerEvent(NULL),
m_nElapsedInterval()
{
}
TimerTask::~TimerTask(void)
{
Stop();
} int TimerTask::svc()
{
if (NULL == m_pTriggerEvent)
return -; ACE_Time_Value tTimeOut(m_nElapsedInterval);
while (!m_bStop)
{
int iRet = ACE_OS::event_timedwait(&m_hResetEvent, &tTimeOut, );
if (m_bStop)
break; if ( == iRet)
continue; if (ETIME == ACE_OS::last_error())
{
m_pTriggerEvent(m_pContext);
}
}
return ;
} int TimerTask::Start(pfnTimerTriggerEvent pTriggerEvent, void* pContext)
{
if (NULL == pTriggerEvent)
return -; m_pContext = pContext;
m_pTriggerEvent = pTriggerEvent; if (ACE_OS::event_init(&m_hResetEvent, , ) != )
return -; m_bStop = false;
if (activate(THR_NEW_LWP | THR_JOINABLE |THR_INHERIT_SCHED) != )
return -;
return ;
} int TimerTask::Stop()
{
if (!m_bStop)
{
m_bStop = true;
ACE_OS::event_signal(&m_hResetEvent);
wait();
ACE_OS::event_destroy(&m_hResetEvent);
}
return ;
} int TimerTask::ResetTimer(int nElapsedInterval)
{
m_nElapsedInterval = nElapsedInterval;
return ACE_OS::event_signal(&m_hResetEvent);
}

一个ACE 架构的 C++ Timer的更多相关文章

  1. 一个ACE 架构的 Socket Client

    .h /************************************************************** * Filename: TcpClient.h * Copyrig ...

  2. .Net机试题——编写一个BS架构的多层表结构的信息管理模块

      要求: 编写一个BS架构的多层表结构的信息管理模块,用户体验需要注意.包含错误处理,需要最终能完整的跑起来.页面可以不美化,但是整洁还是必须的.在不能完成详细功能需求的情况下优先保证基本功能. 1 ...

  3. 一个Android 架构师的成长之路

    前言 总所周知,当下流行的编程语言有Java.PHP.C.C++.Python.Go等.其中,稳坐榜首的仍然是Java编程语言,且在以面向对象思想占主导的应用开发中,Java往往成为其代名词.Java ...

  4. Kubernetes实战 - 从零开始搭建微服务 1 - 使用kind构建一个单层架构Node/Express网络应用程序

    使用kind构建一个单层架构Node/Express网络应用程序 Kubernetes实战-从零开始搭建微服务 1 前言 准备写一个Kubernetes实战系列教程,毕竟cnblogs作为国内最早的技 ...

  5. 【架构】生成全局唯一ID的3个思路,来自一个资深架构师的总结

    标识(ID / Identifier)是无处不在的,生成标识的主体是人,那么它就是一个命名过程,如果是计算机,那么它就是一个生成过程.如何保证分布式系统下,并行生成标识的唯一与标识的命名空间有着密不可 ...

  6. 阿里Java架构师谈谈架构和如何成为一个Java架构师

    架构的定义 我们来看看软件架构的一般定义: 程序和计算系统软件体系结构是指系统的一个或多个结构. 该结构包括软件的构建,构建的外部可见属性以及它们之间的相互关系. 该体系结构不是可操作的软件. 具体来 ...

  7. 很小的一个函数执行时间调试器Timer

    对于函数的执行性能(这里主要考虑执行时间,所耗内存暂不考虑),这里写了一个简单的类Timer,用于量化函数执行所耗时间. 整体思路很简单,就是new Date()的时间差值.我仅仅了做了一层简单的封装 ...

  8. 一个App架构例子分析--UI层使用MVP模式;各层之间使用Otto实现通信

    一.这个App整体的架构划分: 分为四大模块:   1.app模块 2.common模块 3.domain模块 4.model模块     app模块的依赖: dependencies {     c ...

  9. 要成为一个 Java 架构师得学习哪些知识?

    作者:zhuqz链接:https://www.zhihu.com/question/29031276/answer/54631312来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

随机推荐

  1. Java实现 LeetCode 514 自由之路

    514. 自由之路 视频游戏"辐射4"中,任务"通向自由"要求玩家到达名为"Freedom Trail Ring"的金属表盘,并使用表盘拼写 ...

  2. Java实现 蓝桥杯VIP 算法训练 学做菜

    算法训练 学做菜 时间限制:1.0s 内存限制:256.0MB 问题描述 涛涛立志要做新好青年,他最近在学做菜.由于技术还很生疏,他只会用鸡蛋,西红柿,鸡丁,辣酱这四种原料来做菜,我们给这四种原料标上 ...

  3. Java实现 蓝桥杯VIP 算法训练 装箱问题

    题目描述 有一个箱子容量为V(正整数0≤V≤20000),同时有n个物品(0<n≤30,每个物品有一个体积(正整数). 要求nn个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. 输入输出格 ...

  4. Java实现矩阵相乘问题

    1 问题描述 1.1实验题目 设M1和M2是两个n×n的矩阵,设计算法计算M1×M2 的乘积. 1.2实验目的 (1)提高应用蛮力法设计算法的技能: (2)深刻理解并掌握分治法的设计思想: (3)理解 ...

  5. java实现迷宫走法

    ** 迷宫走法** 迷宫问题 对于走迷宫,人们提出过很多计算机上的解法.深度优先搜索.广度优先搜索是使用最广的方法.生活中,人们更愿意使用"紧贴墙壁,靠右行走"的简单规则. 下面的 ...

  6. PAT 程序运行时间

    要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗费的时间.这个时间单位是 clock ...

  7. snowflake原理解析

    Snowflake 世界上没有两片完全相同的雪花. ​ - twitter Snowflake原理 这种方案把64-bit分别划分成多段,分开来标示机器.时间等,比如在snowflake中的64-bi ...

  8. 温故知新-多线程-forkjoin、CountDownLatch、CyclicBarrier、Semaphore用法

    Posted by 微博@Yangsc_o 原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 文章目录 摘要 forkjoin C ...

  9. js循环练习

    var a=1; while(a>0){ var b=prompt('input number'); if(b>a){ alert('big'); } else if(b<a){ a ...

  10. spring源码解读-aop

    aop是指面向切面编程,ProxyFactoryBean是spring aop的底层实现与源头,为什么这么说呢?首先我们看一段配置: 1.target是目标对象,需要对其进行切面增强 2.proxyI ...