我有一个日志项目,我需要知道如何构建一个功能,以便旋转器在程序运行时每分钟检查一次,并为每分钟创建时间戳,只是为了将全天的时间戳存储到日志文件中,请帮忙。
谢谢
我有一个日志项目,我需要知道如何构建一个功能,以便旋转器在程序运行时每分钟检查一次,并为每分钟创建时间戳,只是为了将全天的时间戳存储到日志文件中,请帮忙。
谢谢
一个适合您需求的示例异步计时器类...
MyPeriodicTimer.hh
#include "MyTimeOutHandler.hh"
#include <pthread.h>
#include <iostream>
using namespace std;
void* func(void* ptr);
class MyPeriodicTimer
{
public:
MyPeriodicTimer(MyTimeOutHandler* handler,int ms){
milliSecondsM = ms;
handlerM = handler;
createClock();
}
void act(){
time_t rawtime;
time ( &rawtime );
handlerM->handleTimeOut(&rawtime);
sleep(milliSecondsM);
}
pthread_t getThread(){
return clockThreadM;
}
private:
void createClock(){
int retVal = pthread_create( &clockThreadM,NULL,&func,(void*)this);
pthread_join(clockThreadM,NULL);
}
int milliSecondsM;
MyTimeOutHandler* handlerM;
pthread_t clockThreadM;
};
void* func(void* obj){
while(1){
(reinterpret_cast<MyPeriodicTimer*>(obj))->act();
}
}
定义处理超时的接口
MyTimeOutHandler.hh
#ifndef MY_TIMEOUT_HANDLER_HH
#define MY_TIMEOUT_HANDLER_HH
#include <time.h>
class MyTimeOutHandler{
public:
virtual void handleTimeOut(time_t*) = 0;
};
#endif
创建你的 LogHandler
日志处理程序.cc
#include "MyTimeOutHandler.hh"
#include "MyPeriodicTimer.hh"
#include <iostream>
#include <time.h>
using namespace std;
class LogHandler : public MyTimeOutHandler{
public:
void start(int ms){
MyPeriodicTimer timer(this,ms);
}
/* CallBack when timer is fired */
void handleTimeOut(time_t* time){
// Implement your Logging functionality Here
cout<<"Time : "<<ctime(time)<<endl;
}
};
int main(){
LogHandler l;
l.start(60);
return 0;
}
输出:
>g++ -pthread LogHandler.cc
>./a.out
Time : Tue Apr 10 17:24:17 2012
Time : Tue Apr 10 17:25:17 2012
Time : Tue Apr 10 17:26:17 2012
我建议使用互斥锁进行检查: http: //msdn.microsoft.com/en-us/library/ms686927%28VS.85%29.aspx 时间戳和日志文件与它无关。使用 MSDN - 你会在那里找到示例。