[英]Best way to return a set of values from a function
我有一个计数器列表,并且在每个时钟中断时都要检查每个计数器。 每当计数器过期时,我都需要将所有过期的计数器返回给调用代码,以便知道哪个计数器已过期。 做这件事的最优雅的方法是什么? 我正在考虑在数组中设置每个标志并进行检查。 但是我发现这是在检查计数器到期时进行的另一轮检查。
每当时钟滴答到期时,都会调用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()
)进行通信,因此当前将激活哪些时钟,因此建议向Node
添加另一个字段bool Active
。 在CheckCounterExpiry()
,当时钟到期时将其设置为false。
因此, CheckCounterExpiry()
仅更新Active
字段。 让另一个例程,例如Node *GetExpiredClock()
消耗停用的时钟。 它会获得1个过期时钟(如果有),否则返回NULL。 它收缩了1清单,因为这是当node
完成。 如果需要,请多次拨打。 该例程可能需要中断保护,以确保不调用CheckCounterExpiry()
。
此外,在CheckCounterExpiry()
内部,更改如下。 这样可以防止时钟错误滴答声将所有内容混为一谈。
// if (clocktick== temp->target)
if (clocktick >= temp->target)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.