#define WM_COMM_READ (WM_USER +1) #define BUFF_SIZE 4192 // Åë½Å Ŭ·¡½º CCommThread // Æ÷Æ®¿¡¼­ Àбâ : // Æ÷Æ®¸¦ ¿¬ ÈÄ¿¡ Æ÷Æ®¿¡ ÀÚ·á°¡ µµÂøÇϸé WM_COMM_READ ¸Þ½ÃÁö°¡ ¸ÞÀÎ // À©µµ¿ì¿¡ Àü´ÞµÈ´Ù. ON_MESSAGE ¸ÅÅ©·Î¸¦ ÀÌ¿ë, ÇÔ¼ö¸¦ ¿¬°áÇϰí // m_ReadData String¿¡ ÀúÀåµÈ µ¥ÀÌÅ͸¦ ÀÌ¿ë Àбâ // Æ÷Æ®¿¡ ¾²±â : WriteComm(buff, 30)°ú °°ÀÌ ¹öÆÛ¿Í ±× Å©±â¸¦ °Ç³×¸é µÈ´Ù. class CQueue { public: BYTE buff[BUFF_SIZE];//Å¥ ¹öÆÛ »çÀÌÁî´Â 4192·Î ¸¸µë int m_iHead, m_iTail;//Å¥ ¹öÆÛ¿¡ µ¥ÀÌÅ͸¦ ³Ö°í »© ¿Ã¶§ »ç¿ëÇÒ º¯¼ö CQueue(); void Clear();//¹öÆÛ¸¦ ÃʱâÈ­ ½ÃÅ´ int GetSize();//ÇöÀç ¹öÆÛ¿¡ µé¾îÀÖ´Â µ¥ÀÌÅÍÀÇ size¸¦ ¸®ÅÏ BOOL PutByte(BYTE b);//Å¥¹öÆÛ¿¡ 1¹ÙÀÌÆ®¸¦ ³ÖÀ½ BOOL GetByte(BYTE *pb);//Å¥¹öÆÛ¿¡¼­ 1¹ÙÀÌÆ®¸¦ »© ¿È BOOL GetBytes(BYTE *pb,int);//Å¥¹öÆÛ¿¡¼­ 1¹ÙÀÌÆ®¸¦ »© ¿È BOOL PutBytes(BYTE *p, int);//Å¥¹öÆÛ¿¡¼­ 1¹ÙÀÌÆ®¸¦ »© ¿È }; class CCommThread { public: CCommThread(); ~CCommThread(); //--------- ȯ°æ º¯¼ö -----------------------------------------// BOOL check; HANDLE m_hComm; // Åë½Å Æ÷Æ® ÆÄÀÏ ÇÚµé CString m_sPortName; // Æ÷Æ® À̸§ (COM1 ..) BOOL m_bConnected; // Æ÷Æ®°¡ ¿­·È´ÂÁö À¯¹«¸¦ ³ªÅ¸³¿. OVERLAPPED m_osRead, m_osWrite; // Æ÷Æ® ÆÄÀÏ Overlapped structure HANDLE m_hThreadWatchComm; // WatchÇÔ¼ö Thread ÇÚµé. WORD m_wPortID; // WM_COMM_READ¿Í ÇÔ²² º¸³»´Â Àμö. CQueue m_QueueRead; //Å¥¹öÆÛ //--------- ¿ÜºÎ »ç¿ë ÇÔ¼ö ------------------------------------// BOOL OpenPort(CString strPortName, DWORD dwBaud, BYTE byData, BYTE byStop, BYTE byParity );//Æ÷Æ® ¿­±â BOOL CheckPort(CString strPortName, DWORD dwBaud, BYTE byData, BYTE byStop, BYTE byParity );//Æ÷Æ® ¿­±â void ClosePort(); //Æ÷Æ® ´Ý±â DWORD WriteComm(BYTE *pBuff, DWORD nToWrite);//Æ÷Æ®¿¡ µ¥ÀÌÅÍ ¾²±â //--------- ³»ºÎ »ç¿ë ÇÔ¼ö ------------------------------------// DWORD ReadComm(BYTE *pBuff, DWORD nToRead);//Æ÷Æ®¿¡¼­ µ¥ÀÌÅÍ Àоî¿À±â }; // Thread·Î »ç¿ëÇÒ ÇÔ¼ö DWORD ThreadWatchComm(CCommThread* pComm);