gpt4 book ai didi

c - 从函数返回一组值的最佳方法

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

我有一个计数器列表,并且我在每个时钟中断时检查每个计数器。每当计数器过期时,我需要将所有过期的计数器返回给调用代码,以便知道哪一个过期了。做同样的事情最优雅的方式是什么? 我正在考虑将每个标志设置在一个数组中并进行检查。但我发现这是在检查计数器到期时完成的又一轮检查。

只要时钟周期到期,就会调用函数 CheckCounterExpiry。下面不处理返回,因为这是我的查询。

void  CheckCounterExpiry()
{
Node *prev, *temp;
if (head == NULL)
{
return;
}
else
{
/*Check for counter and delete, return set of deleted id types as to signal which got deleted*/
prev = NULL;
temp = head;
while (temp->next != NULL)
{
if (clocktick== temp->target)
{
if (prev == NULL)
{
head = NULL;
}
/* I need to return the list of temp->counterId here. how to do it best?*/
prev->next = temp->next;
free(temp);

}
else
{
prev= temp;
temp = temp->next;
}

}

}

}

最佳答案

范式转变。不要收缩 CheckCounterExpiry() 中的链接。

由于您使用全局值head来与您的ISR(中断服务例程void CheckCounterExpiry())通信当前处于事件状态的时钟,我建议另一个字段 bool Active 添加到 Node。在 CheckCounterExpiry() 中,当时钟到期时将其设置为 false。

因此 CheckCounterExpiry() 仅更新 Active 字段。让另一个例程,例如 Node *GetExpiredClock() 消耗已停用的时钟。如果有的话,它会获取 1 个过期时钟,否则返回 NULL。当节点完成时,它会将列表缩小1。this。如有需要请多次调用。该例程可能需要中断保护以确保 CheckCounterExpiry() 不被调用。

此外,在 CheckCounterExpiry() 内部进行如下更改。这可以防止时钟错误使一切变得困惑。

// if (clocktick== temp->target)
if (clocktick >= temp->target)

关于c - 从函数返回一组值的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20257025/

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