第五章 Cach 變數大全 HALT 變數

2021-10-16 05:23:10 字數 3347 閱讀 3406

示例

包含暫停陷阱例程呼叫。

$halt
$halt包含當前暫停陷阱例程的名稱。當遇到halt命令時,應用程式將呼叫暫停陷阱例程。該暫停陷阱例程可以在發出halt命令之前執行清理或日誌記錄處理,或者可以替代其他處理而不是暫停程式執行。

可以使用set命令將$halt設定為暫停陷阱例程。暫停陷阱例程由帶引號的字串指定,格式如下

set $halt=location
此處的位置可以指定為label(當前例程或過程中的標籤),^routine(指定外部例程的開始)或label^routine(指定外部例程中的指定標籤)。

$halt在某些情況下(但在程式中不支援)支援label + offset。這個可選的+offset是乙個整數,指定要從label偏移的行數。 intersystems建議在指定位置時避免使用行偏移量。

呼叫過程或cachesys%例程時,不能指定+偏移量。如果嘗試這樣做,caché會發出錯誤。

$halt定義當前上下文的暫停陷阱例程。如果已經為當前上下文定義了停止陷阱,則新陷阱將替換它。如果指定了不存在的例程名稱,則halt命令將忽略$halt並展開堆疊以在先前的上下文級別定位有效的$halt

要刪除當前上下文的暫停陷阱,請將$halt設定為空字串。嘗試使用newkill命令刪除暫停陷阱會導致錯誤。

發出halt命令時,caché會在當前上下文中檢查$halt。如果沒有為當前上下文定義$halt(或者將其設定為不存在的例程名稱或空字串),則caché會將堆疊展開到先前的上下文,並在其中查詢$halt。該過程將一直持續到找到定義的$halt或堆疊完全解卷為止。 caché使用$halt的值將執行轉移到指定的暫停陷阱例程。暫停陷阱例程在定義$halt的上下文中執行。沒有設定錯誤**或發出錯誤訊息。

如果在當前上下文或先前的上下文中未設定有效的$halt,則發出halt命令將完全展開堆疊並執行實際的程式暫停。

通常,暫停陷阱例程執行一些清理或報告處理,然後發出halt命令。請注意,在定義了$halt的情況下,原始的halt命令將呼叫暫停陷阱,但不會執行實際的程式暫停。為了使實際停止,停止陷阱例程必須包含第二個halt命令。

暫停陷阱例程發出的halt命令不會被該暫停陷阱捕獲,但是可能會被在較低上下文級別建立的暫停陷阱捕獲。因此,可以由單個halt命令呼叫一系列級聯的停止陷阱。

如果設定了$halt,並且在發出halt時為^%zstop定義了**,則首先執行$halt$halt可以防止程序終止,如果它的halt陷阱例程不包含halt命令。

當程序實際終止時,執行^%zstop例程。

以下示例使用$halt來建立乙個halt陷阱:

/// d ##class(pha.test.specialvariables).halt()

classmethod halt()

(pha.test.specialvariables)

.halt()

the halt trap is:

+101

^pha.test.specialvariables.

11請注意,終端確保指定的例程存在。

以下示例顯示了在定義$halt的上下文中如何執行暫停陷阱例程。在此示例中,$halt定義為$estack級別0,halt發出為$estack級別1,並且暫停陷阱例程以$estack級別0執行。

/// d ##class(pha.test.specialvariables).halt1()

classmethod halt1()

除了$halt是在$estack級別1定義的,以下示例與上一示例相同。在$estack級別1發出的halt命令以及在$estack級別1執行的暫停陷阱例程。暫停陷阱例程解開堆疊,並且,如果找不到在先前上下文級別定義的$halt,它將暫停程式執行。因此,不執行do命令之後的write命令。

以下示例顯示了如何呼叫一系列級聯的暫停陷阱。暫停陷阱halt0定義為$estack級別0,並且暫停陷阱halt1定義為$estack級別1。halt命令以$estack級別2發出。caché展開堆疊以在$estack級別1呼叫暫停陷阱halt1。該停止陷阱發出乙個halt命令。 caché展開堆疊以在$estack級別0呼叫暫停陷阱halt0。此暫停陷阱發出乙個halt命令,該命令暫停程式執行。

/// d ##class(pha.test.specialvariables).halt3()

classmethod halt3()

第二章 Cach 變數大全 ECODE 變數

包含當前錯誤 字串。ecode ec發生錯誤時,cach 會將 ecode特殊變數設定為逗號分隔的字串,其中包含與錯誤相對應的錯誤 例如,當引用未定義的全域性變數時,cach 將 ecode特殊變數設定為以下字串 m7,ecode可以包含iso 11756 1999標準m錯誤 格式為m 其中 是整數...

第七章 Cach 變數大全 IO 變數

包含當前輸入 輸出裝置的id。io i io包含所有輸入 輸出操作所指向的當前裝置的裝置id。如果輸入和輸出裝置不同,則 io包含當前輸入裝置的id。cach 在登入時將 io的值設定為主要輸入 輸出裝置。principal包含主體裝置的id。發出use命令來更改當前裝置。只有use和close命令...

第三章 Cach 變數大全 ESTACK 變數

示例注意 estack 和錯誤處理 包含從使用者定義的點儲存在呼叫堆疊上的上下文幀的數量。estack es estack包含從使用者定義的點為job儲存在呼叫堆疊上的上下文幀的數量。可以通過使用new命令建立 estack的新副本來指定這一點。estack特殊變數類似於 stack特殊變數。兩者都...