一个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: 4 2 1231 输出样例#1: 62 import java.util.Scanner; public class chengjizuida { public stat ...
- Java实现 LeetCode 23 合并K个排序链表
23. 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输 ...
- Java实现第九届蓝桥杯螺旋折线
螺旋折线 题目描述 如图p1.pgn所示的螺旋折线经过平面上所有整点恰好一次. 对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度. 例如dis(0 ...
- Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何选择流处理框架
根据最新的统计显示,仅在过去的两年中,当今世界上90%的数据都是在新产生的,每天创建2.5万亿字节的数据,并且随着新设备,传感器和技术的出现,数据增长速度可能会进一步加快. 从技术上讲,这意味着我们的 ...
- FastJson将Java对象转换成json
确保环境依赖都配置好! 1.在pom.xml导入依赖 <dependency> <groupId>com.alibaba</groupId> <artifac ...
- 在kubernetes中搭建harbor,并利用MinIO对象存储保存镜像文件
前言:此文档是用来在线下环境harbor利用MinIO做镜像存储的,至于那些说OSS不香吗?或者单机harbor的,不用看了.此文档对你没啥用,如果是采用单机的harbor连接集群MinIO,请看我的 ...
- @gym - 100591D@ Fox Rocks
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定 N 个点以及 P 条单向道路 Ai -> Bi,每条 ...
- Right turn【模拟+标记】
Right turn 题目链接(点击) frog is trapped in a maze. The maze is infinitely large and divided into grids. ...
- 从字符串到常量池,一文看懂String类设计
从一道面试题开始 看到这个标题,你肯定以为我又要讲这道面试题了 // 这行代码创建了几个对象? String s3 = new String("1"); 是的,没错,我确实要从这里 ...
- 从JRaft来看Raft协议实现细节
分布式系统和一致性问题 一致性问题(consensus problem)是分布式系统需要解决的一个核心问题.分布式系统一般是由多个地位相等的节点组成,各个节点之间的交互就好比几个人聚在一起讨论问题.让 ...