自己写的 C++ 串口通讯类,希望大家帮忙指正!自己使用过,能行!但感觉非常不好。该如何解决

自己写的 C++ 串口通讯类,希望大家帮忙指正!自己使用过,能行!但感觉非常不好。。。。。 - C++ Builder / Windows SDK/API
[code=C/C++][/code]
//---------------------------------------

#ifndef _MscommH_H
#define _MscommH_H
//---------------------------------------
#include <windows.h>
#include <stdio.h>
#include <string.h>

#define WM_COMM_RXCHAR WM_USER + 10 //自定义串口接收数据消息

class Mscomm
{
private:
HWND wHand; //主窗口句柄
HANDLE hThread; //线程句柄
HANDLE hComm; //串口句柄
bool IsOpen; //记录串口是否打开
bool ThreadFlag; //线程开关标记

OVERLAPPED WriteovReady,ReadovReady; //读写异步结构,用来保存异步操作结果

//以 Delimit 为分隔符拆分字符串 Str 到字符数组 S 中
// void SplitStr(String *S,String Str, char Delimit);


protected:
COMSTAT lpStat;
DWORD dwError;

DWORD GetInBufferCount()
{
dwError = 0;
lpStat.cbInQue = 0;
ClearCommError(hComm,&dwError,&lpStat);
return lpStat.cbInQue ;
}
void SetInBufferCount(int InBuf)
{
if(!InBuf)
PurgeComm(hComm, PURGE_RXCLEAR);
}

DWORD GetOutBufferCount()
{
dwError = 0;
lpStat.cbOutQue = 0;
ClearCommError(hComm,&dwError,&lpStat);
return lpStat.cbOutQue ;
}

void SetOutBufferCount(int OutBuf)
{
if(!OutBuf)
PurgeComm(hComm, PURGE_TXCLEAR);
}


void SetRThreshold(bool RTh) //线程开启和挂起函数
{

if((!this->ThreadFlag) && RTh)
{
ResumeThread(hThread); 
}
if(this->ThreadFlag && !RTh)
{
SuspendThread(hThread);
}

this->ThreadFlag = RTh;

}

// bool GetRThreshold(void){return ThreadFlag;}

 /***********************线程函数**********************/
static DWORD WaitThread(void *lp)
{
DWORD dwEventMask = 0; // 发生的事件
DWORD TempCount1 = 0;
DWORD TempCount2 = 0;
bool tFlag = FALSE;
OVERLAPPED Watch;
// HANDLE hEvent;
Mscomm *This = (Mscomm*)lp;

memset(&Watch,0,sizeof(Watch));
// 创建一个人工重设
Watch.hEvent = CreateEvent(NULL,FALSE,FALSE,"WatchEvent");

while(This->ThreadFlag)
{

if(WaitCommEvent(This->hComm,&dwEventMask,&Watch));
{
if(dwEventMask == EV_RXCHAR)
{

if(This->InBufferCount != 0)
{
SendMessage(This->wHand ,WM_COMM_RXCHAR,0,0);
dwEventMask = 0;
// while(This->InBufferCount != 0);
}
}
}

}

return 0;
}

//===============线程退出===============
void ExitThread()
{


if(ThreadFlag)
{
ThreadFlag = FALSE;
WaitForSingleObject(hThread,INFINITE);
  }


CloseHandle(hThread);

}


public:
// int mPort; //端口号

//设置并返回接收缓冲区的字节数
// __property int InBufferSize = {write=SetInBufferSize};

//以字节的形式设置并返回传输缓冲区的大小
// __property int OutBufferSize = {write=SetOutBufferSize};

Mscomm(HWND hand = NULL);

virtual ~Mscomm();

bool OpenComm(int Port); //打开串口
void CloseComm(); //关闭打开的串口
bool CommSetting(char* Setting); //串口设置
bool RedComm(unsigned char* ReadData, //读串口数据
DWORD ReadCount=1);
bool WriteComm(char* Send); //发送数据到串口


__property DWORD InBufferCount = {read=GetInBufferCount,write=SetInBufferCount};
__property DWORD OutBufferCount = {read=GetOutBufferCount,write=SetOutBufferCount};