簡體   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