SDC C-Project CF Review 프로그램
LYW
2021-10-14 26e2541b87ca76e16cf69399eb9a3cce62d2e864
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#pragma once
 
#include "TimerThreadPools.h"
 
#include <vector>
#include <deque>
 
using namespace std;
 
struct SFDCData
{
    SFDCData() 
    {
        Reset();
    }
 
    void Reset() 
    {
        strName            = _T("");
        nDataIndex        = -1;
        nDataType        = 0;
        nRepeatType        = 0;
        dwInterval        = 10000;
        dwLastTime        = 0;
        nAddress        = -1;
        nDataSize        = 0;
        nDataValue        = 0;
        fDataValue        = 0.0f;
    }
 
    // save / load
    CString        strName;        // name
    int            nDataIndex;        // index
    int            nRepeatType;    // type : 0 once, 1 repeat
    DWORD        dwInterval;        // time interval msec
    int            nAddress;        // word
    int            nDataSize;        // word
 
    // 
    DWORD        dwLastTime;        // last report time msec
    int            nDataType;        // data type : 0 int, 1 float
    int            nDataValue;        // int
    float        fDataValue;        // float
};    
typedef std::vector<SFDCData>            VectorSFDCData;
typedef std::vector<SFDCData>::iterator    VectorSFDCDataIt;
 
typedef std::deque<SFDCData*>            DequeSFDCData;
typedef std::deque<SFDCData*>::iterator    DequeSFDCDataIt;
 
interface IFDCReporter2Parent
{
    virtual void FDCR2P_ReportFDCData(const SFDCData& fdcData) = 0;
    virtual BOOL FDCR2P_GetFDCDataValue(SFDCData& fdcData) = 0;
};
 
class AFX_EXT_CLASS CFDCReporter : public CTimerThreadPools
{
public:
    CFDCReporter(const CString& strFileName, DWORD dwTime=500);           // µ¿Àû ¸¸µé±â¿¡ »ç¿ëµÇ´Â protected »ý¼ºÀÚÀÔ´Ï´Ù.
    virtual ~CFDCReporter();
    void SetFDCR2P(IFDCReporter2Parent* pFDCR2P)    { m_pFDCR2P = pFDCR2P; }
 
    // CTimerThreadPools
    virtual BOOL    StartThread();
    virtual void    StopThread();
 
    virtual void    ClearOnceData();
    virtual void    AddDefaultData();
 
    virtual BOOL    LoadFDCData();
    virtual BOOL    SaveFDCData();
 
    virtual void    AddFDCData(const SFDCData& data);
 
protected:
    // CTimerThreadPools
    virtual void TimerThreadProcess(PVOID pParameter);
 
protected:
    void Reporting();
 
    CString                        m_strFileName;
    BOOL                        m_bIsRunThread;            // thread status
    BOOL                        m_bThreadRun;            // thread status
    CRITICAL_SECTION            m_csExit;                // exit cs
    DWORD                        m_dwTime;
 
    IFDCReporter2Parent*        m_pFDCR2P;    
    VectorSFDCData                m_vecFDCData;        // repeat
};