只打印一次(状态改变时)
为了防止日志一直打印输出,只在状态改变时打印一次
#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; } } } } }