一个ACE 架构的 C++ Timer
.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的更多相关文章
- 一个ACE 架构的 Socket Client
.h /************************************************************** * Filename: TcpClient.h * Copyrig ...
- .Net机试题——编写一个BS架构的多层表结构的信息管理模块
要求: 编写一个BS架构的多层表结构的信息管理模块,用户体验需要注意.包含错误处理,需要最终能完整的跑起来.页面可以不美化,但是整洁还是必须的.在不能完成详细功能需求的情况下优先保证基本功能. 1 ...
- 一个Android 架构师的成长之路
前言 总所周知,当下流行的编程语言有Java.PHP.C.C++.Python.Go等.其中,稳坐榜首的仍然是Java编程语言,且在以面向对象思想占主导的应用开发中,Java往往成为其代名词.Java ...
- Kubernetes实战 - 从零开始搭建微服务 1 - 使用kind构建一个单层架构Node/Express网络应用程序
使用kind构建一个单层架构Node/Express网络应用程序 Kubernetes实战-从零开始搭建微服务 1 前言 准备写一个Kubernetes实战系列教程,毕竟cnblogs作为国内最早的技 ...
- 【架构】生成全局唯一ID的3个思路,来自一个资深架构师的总结
标识(ID / Identifier)是无处不在的,生成标识的主体是人,那么它就是一个命名过程,如果是计算机,那么它就是一个生成过程.如何保证分布式系统下,并行生成标识的唯一与标识的命名空间有着密不可 ...
- 阿里Java架构师谈谈架构和如何成为一个Java架构师
架构的定义 我们来看看软件架构的一般定义: 程序和计算系统软件体系结构是指系统的一个或多个结构. 该结构包括软件的构建,构建的外部可见属性以及它们之间的相互关系. 该体系结构不是可操作的软件. 具体来 ...
- 很小的一个函数执行时间调试器Timer
对于函数的执行性能(这里主要考虑执行时间,所耗内存暂不考虑),这里写了一个简单的类Timer,用于量化函数执行所耗时间. 整体思路很简单,就是new Date()的时间差值.我仅仅了做了一层简单的封装 ...
- 一个App架构例子分析--UI层使用MVP模式;各层之间使用Otto实现通信
一.这个App整体的架构划分: 分为四大模块: 1.app模块 2.common模块 3.domain模块 4.model模块 app模块的依赖: dependencies { c ...
- 要成为一个 Java 架构师得学习哪些知识?
作者:zhuqz链接:https://www.zhihu.com/question/29031276/answer/54631312来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
随机推荐
- Java实现蓝桥杯 算法提高 身份证号码升级
算法提高 身份证号码升级 时间限制:1.0s 内存限制:256.0MB 问题描述 从1999年10月1日开始,公民身份证号码由15位数字增至18位.(18位身份证号码简介).升级方法为: 1.把15位 ...
- Java实现 蓝桥杯VIP 算法训练 比较字符串
算法训练 比较字符串 时间限制:1.0s 内存限制:512.0MB 编程实现两个字符串s1和s2的字典序比较.(保证每一个字符串不是另一个的前缀,且长度在100以内).若s1和s2相等,输出0:若它们 ...
- Java实现 LeetCode 171 Excel表列序号
171. Excel表列序号 给定一个Excel表格中的列名称,返回其相应的列序号. 例如, A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> ...
- Java实现 LeetCode 47 全排列 II(二)
47. 全排列 II 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ] class Solut ...
- Java实现 串中取3个不重复字母
从标准输入读入一个由字母构成的串(不大于30个字符). 从该串中取出3个不重复的字符,求所有的取法. 取出的字符,要求按字母升序排列成一个串. 不同的取法输出顺序可以不考虑. 例如: 输入: abc ...
- java代码(3)----guava复写Object常用方法
guava复写Object常用方法 Guava是一个Google的基于java1.6的类库集合的扩展项目,这个库提供用于集合,缓存,支持原语,并发性,字符串处理,I/O和验证的实用方法, 这些高质量的 ...
- 获取ip地址,并根据ip获取当前省份
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script> //methods里面 // 获取 ...
- 我的Dos笔记
DOS笔记:DOS是英文Disk Operating System的缩写,意思是“磁盘操作系统”[drive:][path][filename] 指定要列出的驱动器.目录和/或文件. /A ...
- 洛谷 P1115 最大子序和
**原题链接** ##题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. **解法**: 1.暴力枚举 时间:O(n^3) 2.简单优化 时间:O(n ...
- sed中使用shell变量
假设希望在 file_to_modified 文件最后新增一行以下信息:传入 shell 脚本文件的第一个参数,以及当前时间(YYYY-MM-DD HH:MMS) date "+%Y-%m- ...