码迷,mamicode.com
首页 > 其他好文 > 详细

定时器-每秒记录日志

时间:2014-11-07 18:40:10      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   ar   os   sp   for   div   

 1 #include<iostream>
 2 #include<windows.h>
 3 #include <MMSystem.h>
 4 #pragma comment(lib, "winmm.lib")
 5 #include<time.h>
 6 #include<stdint.h>
 7 using namespace std;
 8 
 9 #define MAX_LOG_FILE_SIZE 0x4000000    //64MB
10 
11 class CTimer{
12 public:
13     CTimer()
14     {
15         m_tickCount = 0;
16     }
17     ~CTimer()
18     {
19         if(m_timerID)
20         {
21             timeKillEvent(m_timerID);
22         }
23     }
24     static void CALLBACK TimerCallBack(UINT uTimeID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2);
25     void OnTimer();
26     void Log(const char* fmt,...);
27 
28 protected:
29     void Call()
30     {
31         Log("tick...%d",m_tickCount);
32         ++m_tickCount;
33     }
34     void print_format_time(FILE* fileName);
35 
36 private:
37     MMRESULT m_timerID;
38     int m_tickCount;
39 };
40 
41 void CALLBACK CTimer::TimerCallBack(UINT uTimeID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
42 {
43     CTimer *_ctimer = (CTimer*)dwUser;
44     _ctimer->Call();
45 }
46 
47 void CTimer::OnTimer()
48 {
49     timeSetEvent(1000,1,(LPTIMECALLBACK)TimerCallBack,(DWORD)this,TIME_PERIODIC);
50 }
51 
52 void CTimer::print_format_time(FILE* fileName)
53 {
54     SYSTEMTIME _sysTime;
55     GetLocalTime(&_sysTime);
56 
57     fprintf(fileName,"%04d-%02d-%02d %02d:%02d:%02d.%06d        ",_sysTime.wYear,
58         _sysTime.wMonth,_sysTime.wDay,_sysTime.wHour,_sysTime.wMinute,_sysTime.wSecond,_sysTime.wMilliseconds);
59 }
60 
61 void CTimer::Log(const char* fmt,...)
62 {
63     static int file_no(0);
64     static FILE* log_fp = NULL;
65     if(log_fp == NULL)
66     {
67         char log_name[64];
68         uint32_t pid;
69         pid = (uint32_t)GetCurrentProcessId();
70         sprintf_s(log_name,64,"log_%d_%d.txt",pid,file_no);
71         fopen_s(&log_fp,log_name,"w");
72         if(!log_fp)
73             return;
74     }
75     print_format_time(log_fp);
76 
77     va_list ap;
78     va_start(ap,fmt);
79     vfprintf_s(log_fp,fmt,ap);
80     va_end(ap);
81     fflush(log_fp);
82     fprintf(log_fp,"\n");
83     if(ftell(log_fp) > MAX_LOG_FILE_SIZE)
84     {
85         fclose(log_fp);
86         log_fp = NULL;
87         ++file_no;
88     }
89 
90 }
91 
92 int main(int argc, char* argv[])
93 {
94     CTimer _timer;
95     _timer.OnTimer();
96   system("pause");
97     return 0;
98 }

 

定时器-每秒记录日志

标签:style   blog   io   color   ar   os   sp   for   div   

原文地址:http://www.cnblogs.com/felove2013/p/4081818.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!