Alejandro Acuña
2024-10-25 bf65497ed7abf9c669eb3cc0ba219dfa4494b759
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//  CTraceServer.h
 
#ifndef __CTRACESERVER_H
#define __CTRACESERVER_H
 
#include <stdio.h>
#include <string>
#include <list>
 
using namespace std;
 
#define MAX_TRACEFILE_SIZE  (2*1024*1024)
#define NUM_TRACE_FILES       10
#define NUM_TRACE_BUFFERS  10000
#define TRACE_BUFFER_SIZE    256
#define TIMESTAMP_INTERVAL  1000
#define FLUSH_TIMEOUT        500
class CTraceServer {
public:
    CTraceServer();
    ~CTraceServer();
    int initialize();
    int uninitialize();
    DWORD getTraceThreadID();
    int trace(char *traceBuffer);
    char * getTraceBuffer();
private:
    static DWORD WINAPI TraceThread(LPVOID pParams);
private:
    string traceFileName;
    int traceFileNumber;
    int bufferMisses;
    FILE *fpTraceFile;
    bool initialized;
    list<char *> bufferQ;
    CRITICAL_SECTION m_csTraceMutex;
    HANDLE traceThreadStartedEvent;
    HANDLE traceThread;
    DWORD traceThreadID;
    DWORD doTraceThread();
    void freeTraceBuffer(char *traceBuffer);
    bool changeTraceFile();
    bool openFirstTraceFile();
    string makeTraceFileName(int traceFileNum);
    void printTime();
};
 
#endif  // __CTRACESERVER_H