C++|程序中存在互斥通讯时解决方法

71 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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++开发程序猿~