串口等待有关问题

串口等待问题
上位机发送命令给下位机,要是在100ms之内,没有接受到数据就给一个提示信息,怎样在100ms延时期间有数据来临的时候还能执行oncomm函数呢,用怎样的延时程序好呢。

------解决方案--------------------
用信号灯

发送命令给下位机
if( WaitForSingleObject(收到串口数据消息,100) == WAIT_TIMEEOUT )
下位机100MS 未响应
else
下位机有响应


接收线程

while(1)
{
if( WaitforSingleObject(系统退出,10) = WAIT_OBJECT0 )
break;

if( 有数据收到 )
SetEvent(收到串口数据消息);
}
------解决方案--------------------
用j8控件啊。
直接com api就有overlap的异步方式,正好解决你的问题。
------解决方案--------------------
用api函数来写
if( WaitForSingleObject(收到串口数据消息,100) == WAIT_TIMEEOUT )
下位机100MS 未响应
else
下位机有响应
------解决方案--------------------
弄个定时器,在定时事件中判断一下。
------解决方案--------------------
可以用一个状态中间变量,发完数据后为变量置位,并启动100ms定时器,在oncomm事件里给状态变量复位,当定时器触发后,判断状态变量的状态,就可以知道是否有数据收到。

------解决方案--------------------
你要是坚持使用CMSComm,那么可以这样:

在发送数据处理中,
置标志变量bWaiting=TRUE;
发送数据……
SetTimer


在串口事件处理OnComm中
如果是数据接收,则置标志变量bWaiting=FALSE;
KillTimer
数据处理

在定时器消息处理函数OnTimer中
if(bWaiting)
{
超时无应答
}


至于你说的采用了定时器就无法执行Oncomm,这个你要检查代码了,是否正确设置Mscomm?
------解决方案--------------------
延时用的sleep?
在主线程中?
用这个延时试试
void WaitDoevent(DWORD delaytime)
{
DWORD Curtime,EndTime;
Curtime=GetTickCount();
EndTime=Starttime+delaytime;
for(;Curtime <=EndTime;)
{
MSG msg;

if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
DispatchMessage(&msg);
TranslateMessage(&msg);
}
Curtime=GetTickCount();
}
}