Eine Probe Async Timer-Klasse Ihre req zu passen ...
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();
}
}
eine Schnittstelle definieren Timeout
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
für den Umgang mit Erstellen Sie Ihren LogHandler
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;
}
Ausgang:
>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
donot wissen, wo mit – gandhigcpp
beginnen wir die Architektur Ihrer Anwendung nicht kennen. Ihre Anforderung ist unklar. Eine dateTime-Variable auf dem neuesten Stand zu halten, so dass Protokolleinträge mit Zeitstempeln versehen werden können, kann auf verschiedene Arten erfolgen, abhängig vom Rest Ihres Designs. Möglicherweise müssen Sie auf die Logger-Ausgabewarteschlange mit einer Zeitüberschreitung warten und die Zeitüberschreitung jedes Mal neu berechnen, wenn eine Protokollanforderung bearbeitet wird. Bei Zeitüberschreitung die aktuelle Zeit abrufen und die für den Zeitstempel verwendete Datums-/Uhrzeit-Zeichenfolge erneut laden. Vielleicht können Sie einfach einen Timer in Ihrem GUI-Formular oder vielleicht System.Timer verwenden. Vielleicht solltest du etwas Code schreiben und versuchen, es selbst zur Arbeit zu bringen? –