父类和子类两个设备,利用虚函数重写模拟读取数据反馈
enum class ODU_TYPE
{
//两个不同的ODU设备
ODU_TYPE_331,
ODU_TYPE_332,
}odu_tybe;
bool ODU::heartBeat()
{
cout << name() << "模拟读取串口协议,获取心跳包数据反馈..." << endl;
string str;
str=(接收的数据);
bool ret = false;
if (str==(自己设备的数据))
{
odu_tybe = ODU_TYPE_331;//等于自身设备
cout << "OUD设备" << ODU_TYPE_331 << "反馈数据正常" << endl;
ret = true;
}
return ret;
}
//循环对心跳包进行判断,如果读出数据错误就让设备进行切换
ODU_331* odu = NULL;//创建一个父类指针为odu的全局对象
void oduMonitorHandler()
{
while (1)
{
if (odu_331->heartBeat() == false)
{
ODU_TYPE tybe = (获取当前设备的函数);//判断当前是什么设备
{
case ODU_TYPE::ODU_TYPE_331:
delete odu;//删除原有的设备对象
odu = new ODU_332;//切换到另一个设备
break;
case ODU_TYPE::ODU_TYPE_332:
delete odu;
odu = new ODU_331;
break;
default:
odu = NULL;
return;
}
}
Sleep(3000);//等待接收数据的判断时间
}
}
int main()
{
odu = new ODU_331();//首先运行的是设备331
//这个是线程的头文件#include<thread>
thread oduMonitor(oduMonitorHandler);//创建一个单独的线程,运行对心跳包进行判断的函数
oduMonitor.join();//线程等待这个函数结束,因为是循环可以不停的判断直到遇到终止的条件
return 0;
}