Cts框架解析 6 任務的執行

2021-09-07 11:16:52 字數 2299 閱讀 5630

前兩篇講了任務的加入和9大項配置,這篇講任務的執行。

任務的執行在commandscheduler的run方法中,所以刪除全部的斷點,在run方法中打上斷點,重新啟動啟動debug:

先看while迴圈以下的第一行**

executablecommand cmd = dequeueconfigcommand();

private executablecommand dequeueconfigcommand()  catch (interruptedexception e) 

return null;

}

從佇列中取出第乙個物件。假設佇列中沒有元素那就返回null。返回後,while中會推斷假設為null的話,就會結束再次呼叫

executablecommand cmd = dequeueconfigcommand();
直到cmd不為null。

所以在

ideviceselection options = cmd.getconfiguration().getdevicerequirements();
打上斷點,按f8,程式會在cmd不為null時進入到上面的**,停下來。

首先得到系統裝置要求,依據該要求,推斷是否有滿足要求的裝置並分配該裝置。

原生的 要求就乙個s/n號,ddms會依據該sn號分配乙個idevice,然後cts依據idevice包裝成itestdevice物件返回。然後依據itestdevice,idevicemanager和executablecommand開始真正的啟動任務。

我們先不急於討論執行的過程。而是繼續向下看:

addinvocationthread(invthread);

if (cmd.isloopmode())

先將正在執行的執行緒存到set中,然後將該命令再次放入任務佇列中。這種目的是為了能迴圈執行該任務。假設依據sn號沒有分配成功itestdevice,則會再次嘗試一次,假設在規定時間內還沒找到裝置則放棄。

最後做一些teardown操作。然後將case執行過程中的log儲存到檔案。就算執行完了。

如今回頭看一下執行任務的執行緒中是怎樣操作的:

private invocationthread startinvocation(idevicemanager manager, itestdevice device,

executablecommand cmd)

invocationthread為commandscheduler私有內部類。繼承與執行緒,這就屬於執行緒裡啟動執行緒。所以直接看invocationthread的run方法就ok了。在run方法裡呼叫了itestinvocation的invoke方法:

任務的開始點是接受命令行中的引數。假設推斷為執行cts任務,那麼會在console.run方法中啟動加入命令任務的執行緒argrunnable和執行任務的執行緒commandscheduler。加入任務執行緒argrunnable會呼叫commandscheduler物件方法addcommand來向conditionpriorityblockingqueue(採用先進先出的佇列)這個佇列中加入。而執行任務執行緒commandscheduler會通過呼叫自己的私有方法dequeueconfigcommand來從

conditionpriorityblockingqueue去取可執行的任務,每次取第乙個。

然後呼叫invocationthread這個執行緒去執行任務。

invocationthread這個執行緒呼叫testinvocation.invoke方法去執行任務。

明確了麼。事實上非常easy。

第6周任務3

include include cmath using namespace std enum symmetricstyle 分別表示按x軸,y軸,原點對稱 class cpoint void distance cpoint p const 兩點之間的距離 一點是當前點,另一點為引數p void di...

Confluence 6 任務的型別

下面是有關你可以調整的計畫任務列表。對 confluence 站點執行備份操作。每集群 per cluster at 2am every day 檢查集群安全 check cluster safety 針對集群方式的 confluence 安裝,這個計畫任務將會保證在集群中只有乙個 confluen...

素數探求(五) 任務6實現

任務6 從鍵盤任意輸入乙個整數m,若m不是素數,則對m進行質因數分解,並將m以質因數從小到大順序排列的乘積形式輸出,否則輸出 it is a prime number 例如,使用者輸入90時,程式輸出90 2335 使用者輸入17時,程式輸出90 2335 使用者輸入17時,程式輸出 it is a...