c++ - 回调内的全局标志

标签 c++ c

我有一个与系统中的外部硬件通信的代码。根据外部硬件发送的事件,我的 C 源代码中的状态将会改变。系统启动过程中会发生一些握手过程,需要根据握手过程向其他模块发送一些信息。我在回调中设置了一些全局变量,但观察到外部硬件发送了一些事件两次,这使得一些回调被调用两次。这会破坏全局变量中的信息。

 int global_value = 0;
 int eventcb()
 {
    if (some condition)
          global_value = 1;
    else if (some condition)
          global_value = 2;
    else
          global_value = 0;
 }

第一次调用上面的代码时 global_value = 1 假设;下次调用回调时,条件将不会出现,因此 global_value 将变为 0。我不想使用另一个全局变量来跟踪调用此回调的次数,甚至不想使用基于文件的方法(创建文件系统中的文件)。有没有最佳的方法来处理这种情况?我无法控制外部硬件使其仅发送一次事件。

最佳答案

int global_value = -1;
 int eventcb()
 {
    if (some condition && (global_value != -1) )
          global_value = 1;
    else if (some condition && (global_value != -1) )
          global_value = 2;
    else
          global_value = 0;
 }

基本上,当全局处于初始状态时才进行状态转换更改。

当然,您可以向 if 语句添加更多条件,以确保正确覆盖所有状态转换。

关于c++ - 回调内的全局标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11614673/

相关文章:

c++ - 优化矩阵旋转 - 关于矩阵中心的任意角度

c++ - 编译器正确的另一种情况

c - C if 语句条件中 & 符号的使用

c - IRremote.h "no such file or directory"

c - 变量已在 a.obj 中定义

c++ - Netbeans C++ 应用程序无法构建

c++ - 在具有自定义属性的图中获取/查找顶点的安全方法 -> 良好的编程习惯?

c++ - 在 iOS 应用程序中链接静态库后架构 arm64 的 undefined symbol

简而言之结合 MSB 和 LSB

c - source_file.c 是否必须出现在我们试图为 source_file.c 的可执行文件执行 gdb 的目录中?