急问有关串口轮询和定时器的问题!!!!!!!! 监控软件和下位机之间是串口通讯,现在程序要对数个下位机单元不断轮询,召唤数据。问题如下: 程序给定最大轮询时间t,如果监控软件在某个下位机上停留的时间超过t,则中断对此下位机的操作而操作下一个下位机单元,请问这一功能应该如何实现呢??? 我想应该用定时器实现,但是具体怎么实现呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 GetTickCount();在线程中使用看在串口没有事件的时候有多少时间浪费了然后退出线程 能说详细一点吗?用GetTickCount()比较时间的话,只能在操作开始或者结束时比较把,如果t时间到了,但对串口A的操作还没完成,程序如何得知并结束对A的操作开始操作B呢? 这样:建立线程:while(true){ switch(WorkFlag){ case CallData: 下发数据函数:在下发函数中确定下发的RTU站址和命令 case WaitData: 检验接收数据,如果正确就WorkFlag=ProcessData; 否则等待,如果等待tci次还是不正确,就WorkFlag=CallData; case ProcessData: 处理数据;然后WorkFlag=CallData} Sleep(1000);}} SetTimer执行一段采集数据的函数,在此函数中KillTime,然后再SetTimer;如此反复就可以了 应该是比较好实现的:while(Loop){ FUN1();//处理函数Sleep(1);}void CXX::FUN1(){ for (i=0;i<下位机单元的个数;i++) { FUN2();//判断是否传输正确,超时等 }}void cxx::fun2(){ swithc(状态)//这里面加入详细的处理,包含接收的验证,超时的验证等; { case : case : case: }} BOOL QueryTask(HANDLE hComDev, DWORD dwMaxTime){ DWORD stTime, curTime; stTime = GetTickCount(); while(TRUE) { //从串口查询数据 .... curTime = GetTickCount(); if(curTime - stTime > dwMaxTime) return FALSE; //超时 //查询完成 break; } return TRUE;}注:hComDev 是打开串口的ID, dwMaxTime是最大超时时间(毫秒) 求教?如何编程实现登录到windows和注销。 如何获取指定FTP文件的文件长度 请问怎么将byte[32]转换成dword??给个提示好吗? 郁闷啊!神啊救救我吧,Socket.create()出错!....... 带复杂界面的dll的实现问题。 如何利用CDC绘制制表符? 初学者问题 关于VC写SQLServer的扩展存储过程时候的数据类型的问题? 怎么捕捉键盘组合键消息,例如:ctrl+c,ctrl+v,ctrl+x等? 难道电脑没我的尺子准???????????? ---给你加分 几个问题,急等,在线 不爽呀,散分
在线程中使用看在串口没有事件的时候有多少时间浪费了然后退出线程
用GetTickCount()比较时间的话,只能在操作开始或者结束时比较把,如果t时间到了,但对串口A的操作还没完成,程序如何得知并结束对A的操作开始操作B呢?
建立线程:
while(true)
{
switch(WorkFlag)
{
case CallData:
下发数据函数:在下发函数中确定下发的RTU站址和命令
case WaitData:
检验接收数据,如果正确就WorkFlag=ProcessData;
否则等待,如果等待tci次还是不正确,就WorkFlag=CallData;
case ProcessData:
处理数据;然后WorkFlag=CallData}
Sleep(1000);
}
}
while(Loop)
{
FUN1();//处理函数
Sleep(1);
}
void CXX::FUN1()
{
for (i=0;i<下位机单元的个数;i++)
{
FUN2();//判断是否传输正确,超时等
}
}
void cxx::fun2()
{
swithc(状态)//这里面加入详细的处理,包含接收的验证,超时的验证等;
{
case :
case : case:
}
}
{
DWORD stTime, curTime;
stTime = GetTickCount();
while(TRUE)
{
//从串口查询数据
....
curTime = GetTickCount();
if(curTime - stTime > dwMaxTime)
return FALSE; //超时
//查询完成
break;
}
return TRUE;}注:hComDev 是打开串口的ID, dwMaxTime是最大超时时间(毫秒)