2012-04-09 6 views
0

Ich habe ein Protokollierungsprojekt, ich muss wissen, wie man eine Funktionalität baut, damit Rotator für jede Minute prüft, während das Programm läuft und Zeitstempel für jeden schafft Um die Zeitstempel des Tages in einer Protokolldatei zu speichern, helfen Sie bitte.machen eine Funktionalität eines Rotators, der eine Zeitmarke jede Minute eines Tages erstellt

dank

+0

donot wissen, wo mit – gandhigcpp

+0

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? –

Antwort

0

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