只打印一次(状态改变时)

为了防止日志一直打印输出,只在状态改变时打印一次

#include<iostream>

int main()
{
    ///////////////////////////////////////// 对于两种状态切换情况
    {
        bool m_bOnline = true;    //默认在线
        bool m_bFlag1 = true;    //默认都是“开”
        bool m_bFlag2 = true;

        //按一定周期监测m_bOnline状态,执行如下代码段
        {
            if (m_bOnline)
            {
                if (m_bFlag1)
                {
                    m_bFlag1 = false;    //关闭自己,打开其他
                    m_bFlag2 = true;
                    std::cout << "在线" << std::endl;
                }

            }
            else
            {
                if (m_bFlag2)
                {
                    m_bFlag1 = true;
                    m_bFlag2 = false;    //关闭自己,打开其他
                    std::cout << "掉线" << std::endl;
                }
            }
        }
    }


    ///////////////////////////////////////// 对于三种状态切换情况
    {
        int m_nCondition = 0;        //0\1\2三种状态,默认状态1
        bool m_bFlag1 = true;
        bool m_bFlag2 = true;
        bool m_bFlag3 = true;

        //按一定周期监测m_nCondition状态,执行如下代码段
        {
            if (m_nCondition == 0)
            {
                if (m_bFlag1)
                {
                    m_bFlag1 = false;    //关闭自己,打开其他两个
                    m_bFlag2 = true;
                    m_bFlag3 = true;
                    std::cout << "状态1" << std::endl;
                }
            }
            else if (m_nCondition == 1)
            {
                if (m_bFlag2)
                {
                    m_bFlag1 = true;
                    m_bFlag2 = false;    //关闭自己,打开其他两个
                    m_bFlag3 = true;
                    std::cout << "状态2" << std::endl;
                }
            }
            else if (m_nCondition == 2)
            {
                if (m_bFlag3)
                {
                    m_bFlag1 = true;
                    m_bFlag2 = true;
                    m_bFlag3 = false;    //关闭自己,打开其他两个
                    std::cout << "状态3" << std::endl;
                }
            }
        }
    }
}

也可以使用如下方法:

有“开关”思维,那么可以让“位”当“开关”

int main()
{
    ///////////////////////////////////////// 对于两种状态切换情况
    {
        bool m_bOnline = true;        //默认在线
        char m_nFlag = 0x3;            //11,只关注低2位。默认都是“开”

            //按一定周期监测m_bOnline状态,执行如下代码段
        {
            if (m_bOnline)
            {
                if (m_nFlag & 0x1 == 1)
                {
                    m_nFlag = 0x2;    //10,关闭自己,打开其他
                    std::cout << "在线" << std::endl;
                }

            }
            else
            {
                if ((m_nFlag >> 1) & 0x1 == 1)
                {
                    m_nFlag = 0x1;    //01,关闭自己,打开其他    
                    std::cout << "掉线" << std::endl;
                }
            }
        }
    }

    ///////////////////////////////////////// 对于三种状态切换情况
    {
        int m_nCondition = 0;        //0\1\2三种状态,默认状态1
        char m_nFlag = 0x7;            //111,只关注低3位。默认都是“开”

        //按一定周期监测m_nCondition状态,执行如下代码段
        {
            if (m_nCondition == 0)
            {
                if (m_nFlag & 0x1 == 1)
                {
                    m_nFlag = 0x6;    //110,关闭自己,打开其他两个
                    std::cout << "状态1" << std::endl;
                }
            }
            else if (m_nCondition == 1)
            {
                if ((m_nFlag >> 1) & 0x1 == 1)
                {
                    m_nFlag = 0x5;    //101,关闭自己,打开其他两个
                    std::cout << "状态2" << std::endl;
                }
            }
            else if (m_nCondition == 2)
            {
                if ((m_nFlag >> 2) & 0x1 == 1)
                {
                    m_nFlag = 0x3;    //011,关闭自己,打开其他两个
                    std::cout << "状态3" << std::endl;
                }
            }
        }
    }
}

 

posted @ 2024-05-25 16:20  夕西行  阅读(7)  评论(0编辑  收藏  举报