持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情
什么是互斥通讯?
假设一个设备有连接两个不同设备的功能,但是每次只能展现与一个设备的通讯,另一个设备不响应任何消息。
此时我们在程序中通常如何处理呢?
我的程序中有两个页面分别管理与不同设备通讯操作,程序一启动就需要将与两个设备的通讯开启。
A设备 --> A页面
B设备 --> B页面
因为功能需求,A、B两个页面是由外部通讯消息呼出来的,所以,并不能确定到底是A页面先出来?B页面先出来?
A页面第一个被呼出来之后,B页面就不能接收任何响应了;同理,B页面也是如此。
在程序中我们该如何处理呢?
1:程序一启动,两个设备通讯被启动,准备实时接收数据。
2:呼出某个页面时操作。
2.1:当A页面被第一个呼出来时,立刻关闭与B设备通讯。
2.2:当B页面被第一个呼出来时,立刻关闭与A设备通讯。
3:关闭某个页面操作。
3.1:当A页面交互结束后,再开启与B页面的通讯。
3.2:当B页面交互结束后,再开启与B页面的通讯。
程序中如何操作代码,如下:
void QMyWidget::ReceivedADevice(int nstate)
{
if(nstate == 1)
{
//显示A页面
m_pADlg->show();
//关闭B设备通讯
closeBDeviceScoket();
}
else
{
//关闭A页面
m_pADlg->hide();
//恢复B设备通讯
resetBDeviceSocket();
}
}
为什么需要如此麻烦呢?
一开始就提到了,A页面是被socket通讯呼出来的,无论你的程序运行到什么程序。那么,B页面也是呗socket通讯呼出来的。
A、B两个设备分别与PC端连接时,此时的A、B设备并不知道对方是处于运行还是非运行状态,此时就需要PC端进行处理。
确保在于A设备通讯操作时,不会突然弹出B设备信息,防止程序页面错乱,以及数据处理问题。
大家在开发中有没有遇到这般鸡肋的问题呢?
我是中国好公民st,一名C++开发程序猿~