繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM