做过Modem、串口通讯的进来,一定要高手哦
但是,和Modem连接情况是,开头的connect xxxx,busy,no caarier....一类的Modem发过来的字符可以收到,但是随后的数据都收不到,根本就没有送到我的缓冲区,
ComStat.cbInQue==0!!!!!怎么回事,各位不妨直言,说不定可以旁敲侧击;
另外,超级终端可以完全正确的显示;
我的其他部分和VC自带的例子SERIAL一样;
DWORD PASCAL ReadCommBlock()//读数据的函数;
{
BOOL fReadStat ;
COMSTAT ComStat ;
DWORD dwErrorFlags;
DWORD dwLength=0;
DWORD dwError;
OVERLAPPED os ;
memset(InBuf,0,500);
if(!goon)return 0;//try to make sure that hComm is valide;
ClearCommError(hComm, &dwErrorFlags, &ComStat ) ;
if(ComStat.cbInQue<=0)return 0;
memset( &os, 0, sizeof( OVERLAPPED ) ) ;
os.hEvent=CreateEvent( NULL, // no security
TRUE, // explicit reset req
FALSE, // initial event reset
NULL ) ; // no name
if (os.hEvent == NULL)
return 0;
fReadStat = ReadFile(hComm ,InBuf,ComStat.cbInQue, &dwLength,&os);
if (!fReadStat)
{
if (GetLastError() == ERROR_IO_PENDING)
{
while(!GetOverlappedResult(hComm,&os, &dwLength, TRUE ))
{
dwError = GetLastError();
if(dwError == ERROR_IO_INCOMPLETE)
// normal result if not finished
continue;
else
{
// an error occurred, try to recover
ClearCommError(hComm, &dwErrorFlags, &ComStat ) ;
break;
}
}
}
else
{
// some other error occurred
dwLength = -1 ;
ClearCommError(hComm, &dwErrorFlags, &ComStat ) ;
}
}
CloseHandle(os.hEvent);
return dwLength;
}
UINT CommWatchProc(LPVOID pParam)//监视com事件的线程;
{
DWORD dwEvtMask ;
HWND hWnd=(HWND)pParam;
COMSTAT ComStat ;
DWORD dwErrorFlags;
while(goon)
{
ClearCommError(hComm, &dwErrorFlags, &ComStat ) ;//1
CString ss;//2
ss.Format("%d",dwErrorFlags);//3
if(dwErrorFlags!=0)AfxMessageBox(ss);//4加了这句话后可以收到Modem发过来的Connect xxx等字符;
dwEvtMask = 0 ;
SetCommMask(hComm, EV_RXCHAR );//本来是用EV_RXFLAG接受的,现在就是用EV_RXCHAR也什么都收不到
WaitCommEvent( hComm, &dwEvtMask, NULL );//停在这里;
// if((dwEvtMask & EV_RXFLAG)!=EV_RXFLAG)
// continue;
if(ReadCommBlock()>=0)//对方发送数据后,这里什么也读不到;
::SendMessage(hWnd,WM_HANDLEBUFFER,0,0);
else
::SendMessage(hWnd,WM_WATCHPROCERROR,0,0);
}
return true;
}
相关推荐
奇迹MU模拟器源码深度解析:从VC++网络编程到MMORPG架构设计
网络编程是构建分布式系统的核心技术,其核心原理在于通过Socket API实现进程间通信,采用自定义二进制协议进行高效数据序列化与反序列化。在游戏开发领域,尤其是MMORPG服务器架构中,网络编程的价值尤为突出,它直接决定了游戏的实时性、可扩展性与安全性。经典游戏如《奇迹MU》的服务端模拟器源码,为我们提供了一个完整的研究样本,展示了如何基于VC++和Winsock实现多进程协作的C/S架构。通过剖析其GameServer、DataServer、JoinServer等核心模块,可以深入理解状态机设计、数据包
从《原神》到《王者荣耀》:解密顶级手游都在用的网关架构设计
本文深入解析了《原神》与《王者荣耀》等顶级手游所采用的网关架构设计。网关不仅是流量入口,更是集连接管理、协议路由、安全防护于一体的战略核心。文章对比了MMORPG与MOBA游戏在网关设计上的差异,并阐述了构建高可用、可扩展的企业级游戏网关的核心组件与实战模式,为游戏后端开发提供关键架构洞见。
Unity3D商业Moba手游源码深度解析:架构、同步与优化实战
网络游戏开发中,客户端-服务器架构是支撑实时交互的基石,其核心在于解决状态同步与数据一致性问题。通过状态同步、帧同步或预测回滚等机制,确保多玩家在虚拟世界中体验流畅、公平的对战。这一技术对于MOBA、FPS等强实时游戏类型具有极高价值,是实现低延迟、高并发游戏体验的关键。在Unity3D引擎中,开发者需要综合运用对象池、AssetBundle资源管理、DrawCall优化等手段进行性能调优,并结合服务器权威验证来设计反作弊系统,以构建稳定可靠的商业级游戏。本文以一份完整的商业MOBA手游源码为样本,深入剖析
从MXC300-30看移动SoC融合架构:单核调制解调器如何重塑3G手机设计
在嵌入式系统与移动通信领域,片上系统(SoC)架构设计是平衡性能、功耗与成本的核心。其基本原理是通过将多个处理单元(如CPU、DSP)、内存及外设控制器高度集成于单一芯片,实现数据高效互通与系统简化。这种深度集成带来的技术价值在于显著降低芯片间通信延迟与功耗,减少PCB面积与物料成本,从而为终端设备带来更优的能效比与更紧凑的设计。其典型应用场景包括对尺寸、续航和成本极为敏感的移动通信设备,例如功能手机与早期智能手机。本文以飞思卡尔MXC300-30平台为例,深入剖析其创新的“单核调制解调器”与 **Mobi
基于CGA规则与图像识别的游戏自动化工具设计与实现
自动化技术通过预设规则与条件判断,使计算机能够模拟人类操作,完成重复性任务,其核心价值在于提升效率与解放人力。在软件工程领域,这通常涉及状态机、规则引擎等设计模式。计算机视觉作为关键技术之一,通过图像识别与OCR等手段,使程序能够“感知”屏幕信息,是实现非侵入式自动化的基础。结合规则引擎对任务流程进行抽象描述,可以构建出灵活、可配置的自动化系统。这一技术组合在软件测试、RPA(机器人流程自动化)及辅助工具开发中有着广泛的应用场景。本文以游戏辅助工具MLAssist为例,具体阐述了如何借鉴城市建模领域的CGA


