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