SDC C-Project CF Review 프로그램
LYW
2021-07-19 2bd50ead7f0b92fb9ed5b477b63dea8fbcf8217e
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
#pragma once
 
#include "MemoryPool.h"
 
class AFX_EXT_CLASS CIOCPHandler : public CMemoryPool
{
public:
    CIOCPHandler(void);
    virtual ~CIOCPHandler(void);
            
    BOOL Create(int nMaxNumberOfConcurrentThreads=0, int* pnOutErrCode=NULL);                                                                                                    //!< IOCP »ý¼º ¹× ÃʱâÈ­    
    BOOL Associate(SOCKET hSocket, ULONG_PTR CompletionKey, int* pnOutErrCode=NULL);                                                                                            //!< ¼ÒÄϰú IOCP ¿Í ¿¬°á    
    BOOL Associate(HANDLE hDevice, ULONG_PTR CompletionKey, int* pnOutErrCode=NULL);                                                                                            //!< ÆÄÀÏ ÇÚµé°ú IOCP ¿ÍÀÇ ¿¬°á    
    BOOL PostCompletionStatus(ULONG_PTR CompleitonKey, DWORD dwBytesTransferred=0, OVERLAPPED* pOverlapped=NULL, int* pnOutErrCode=NULL);                                        //!< IO Completion Queue¿¡ ÇÑ ¿Ï·á ·¹Äڵ带 »ç¿ëÀÚ Á¤ÀǷΠÃß°¡    
    BOOL GetCompletionStatus(ULONG_PTR* pOutCompletionKey, LPDWORD pdwOutBytesTransferred, LPOVERLAPPED* pOutOverlapped, int* pnOutErrCode=NULL, DWORD dwWaitingTime=INFINITE);    //!< IO Completion Queue¿¡¼­ ¿Ï·á ÆÐŶÀ» ¾ò¾î¿Â´Ù.
    BOOL CreateThreadPool(IIOCPProcessThread* piProcessThread, int nNumOfPooledThread=0);                                                                                        //!< IOCP Worker Thread Ç®À» ¸¸µë
    void CloseAllThreads(void);                                                                                                                                                    // ÇöÀç µ¹°í Àִ ¾²·¹µå ¸ðµÎ Á×ÀÓ
    
    virtual void ProcessingThread() = 0;                                                                                                                                        //!< Processing Thread ¼ø¼ö °¡»ó ÇÔ¼ö
 
private:
    static DWORD __stdcall IocpWorkerThreadStartingPoint(PVOID pvParam);    ///< IOCP ¿öÄ¿ ¾²·¹µå ½ÃÀÛ Æ÷ÀÎÆ®·Î¼­¸¸ÀÇ ¿ªÈ°
    
private:
    HANDLE            m_hIOCP;                                                ///< IOCP Ä¿³Î °´Ã¼¿¡ ´ëÇÑ ÇÚµé
    int                m_nCreatedThreadNumber;                                    ///< ¸¸µé¾îÁø Worker Thread ¼ö
 
protected:
    volatile LONG    m_nLiveThreadNum;                                        ///< ÇöÀç »ì¾ÆÀִ ¿öÄ¿ ¾²·¹µå ¼ö
    HANDLE            m_EventExitWorkerThread;                                ///< ¿öÄ¿ ¾²·¹µå Á¾·áÀÇ À̺¥Æ® Çڵ鷯
};