恢復任務,OSTaskResume

2021-07-28 11:04:37 字數 815 閱讀 1317

[cpp]view plain

copy

在上一節中曾提到過,被掛起的任務只有通過呼叫ostaskresume()才能恢復。ostaskresume()函式的**如程式清單 l4.17所示。因為ostasksuspend()不能掛起空閒任務,所以必須得確認使用者的應用程式不是在恢復空閒任務[l4.17(1)]。注意,這個測試也可以確保使用者不是在恢復優先順序為os_prio_self的任務(os_prio_self被定義為0xff,它總是比os_lowest_prio大)。  

要恢復的任務必須是存在的,因為使用者要需要操作它的任務控制塊os_tcb[l4.17(2)],並且該任務必須是被掛起的[l4.17(3)]。ostaskresume()是通過清除ostcbstat域中的os_stat_suspend位來取消掛起的[l4.17(4)]。要使任務處於就緒狀態,os_tcbdly域必須為0[l4.17(5)],這是因為在ostcbstat中沒有任何標誌表明任務正在等待延時的期滿。只有當以上兩個條件都滿足的時候,任務才處於就緒狀態[l4.17(6)]。最後,任務排程程式會檢查被恢復的任務擁有的優先順序是否比呼叫本函式的任務的優先順序高[l4.17(7)]。  

程式清單 l 4.17 ostaskresume().  

int8u ostaskresume (int8u prio)  

os_enter_critical();  

if ((ptcb = ostcbpriotbl[prio]) == (os_tcb *)0)  else  else   

return (os_no_err);  

} else   

}  } 

freeRTOS 掛起 恢復任務

任務掛起 它把所有掛起的任務加到 xsuspendedtasklist 中,而且一旦呼叫 vtasksuspend 函式掛起乙個任務,該任務就將從所有它原先連入的鍊錶中刪除 包括就緒表,延時表和它等待的事件鍊錶 兩類列表都要清掉 也就是說,一旦乙個任務被掛起,它將取消先前它的延時和對事件的等待。相反...

UCOSIII任務掛起和恢復

1.1 任務的掛起 我們想暫停某個任務,但是又不想刪除掉這個任務的時候就可以使用函式ostasksuspend 來將這個任務掛起,函式原型如下 void ostasksuspend os tcb p tcb,os err p err 1.2 任務的恢復 當我們想要恢復某個被掛起的任務的時候可以呼叫函...

Flink任務的失敗恢復

在我們寫完flink程式並部署伺服器上後,我們希望程式會一直執行下去。但總會有很多情況會導致全部或部分任務出現異常而導致程式中止,這個時候就希望任務能夠自動處理這些異常情況。在flink中提供了4種重啟策略,這裡簡單記錄一下。一 固定延遲重啟策略 固定延遲重新啟動策略嘗試給定次數重新啟動作業。如果超...