gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:59:12 25 4
gpt4 key购买 nike

我有一个与系统中的外部硬件通信的代码。根据外部硬件发送的事件,我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com