私はロギングプロジェクトを持っているので、プログラムの実行中にローテータが毎分チェックし、毎回タイムスタンプを作成する機能を構築する方法を知る必要があります一日のタイムスタンプをログファイルに保存するだけであれば、助けてください。私はチェックのためにミューテックスを使用することをお勧め毎日タイムスタンプを生成するローテータの機能を作成する
おかげ
私はロギングプロジェクトを持っているので、プログラムの実行中にローテータが毎分チェックし、毎回タイムスタンプを作成する機能を構築する方法を知る必要があります一日のタイムスタンプをログファイルに保存するだけであれば、助けてください。私はチェックのためにミューテックスを使用することをお勧め毎日タイムスタンプを生成するローテータの機能を作成する
おかげ
:http://msdn.microsoft.com/en-us/library/ms686927%28VS.85%29.aspx タイムスタンプおよびログファイルを、それとは何の関係もありません。 MSDNを使用してください - そこに例があります。
これはmutexの悪用です。これを行うためのよりよい方法については、他の回答を参照してください。 – RedX
あなたのreqを合わせてサンプル非同期Timerクラス...
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();
}
}
#ifndef MY_TIMEOUT_HANDLER_HH
#define MY_TIMEOUT_HANDLER_HH
#include <time.h>
class MyTimeOutHandler{
public:
virtual void handleTimeOut(time_t*) = 0;
};
#endif
MyTimeOutHandler.hh
タイムアウトを処理するためのインタフェースを定義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;
}
出力:
>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
は、私たちはあなたのアプリケーションのアーキテクチャを知らないところ – gandhigcpp
で開始することを知ってscroll down toパソコンへ転送。あなたの要件は不明です。ログエントリにタイムスタンプが付くようにdateTime変数を最新の状態に保つことは、デザインの残りの部分に応じて異なる方法で行うことができます。たぶんタイムアウトでロガー出力キューを待つ必要があり、ログ要求が処理されるたびにタイムアウトを再計算する必要があります。タイムアウトになると、現在の時刻を取得し、タイムスタンプに使用されている日時文字列をリロードします。たぶんあなたのGUIフォーム、またはおそらくSystem.Timerのタイマーを使用することができます。たぶんあなたはいくつかのコードを書いて、それを自分自身で動かそうとするべきでしょうか? –