⑴ 計算機程序中攜程相關函數有哪些
第一:讓出協程(線程)。當 C 函數調用了 l ua_yieldk, 當前運行的協程會掛起, 啟動這個線程的 lu a_resume 調用返回。 參數 nresults 指棧上需返回給 lu a_resume 的返回值的個數。
1.1當協程再次被延續時, L ua 調用延續函數 k 繼續運行被掛起()的 C 函數。 延續函數會從前一個函數中接收到相同的棧, 棧中的 n 個返回值被移除而壓入了從 lu a_resume 傳入的參數。 此外,延續函數還會收到傳給 lu a_yieldk 的參數 ctx。
1.2通常,這個函數不會返回; 當協程一次次延續,將從延續函數繼續運行。 然而,有一個例外: 當這個函數從一個逐行運行的鉤子函數(參見 ) 中調用時,lu a_yieldk 不可以提供延續函數。 (也就是類似 l ua_yield 的形式), 而此時,鉤子函數在調用完讓出後將立刻返回。 Lu a 會使協程讓出,一旦協程再次被延續, 觸發鉤子的函數會繼續正常運行。
當一個線程處於未提供延續函數的 C 調用中,調用它會拋出一個錯誤。 從並非用延續方式(例如:主線程)啟動的線程中調用它也會這樣
1.3交換同一個狀態機下不同線程中的值。
這個函數會從 from 的棧上彈出 n 個值, 然後把它們壓入 to 的棧上。
這個函數等價於調用 lua_yieldk, 不同的是不提供延續函數(參見 )。 因此,當線程被延續,線程會繼續運行調用 lu a_yield 函數的函數。
1.4如果給定索引處的值是一個完全用戶數據, 函數返回其內存塊的地址。 如果值是一個輕量用戶數據, 那麼就返回它表示的指針。 否則,返回 NULL 。
1.5把給定索引處的 L ua 值轉換為一個 C 字元串。 如果 len 不為 NULL , 它還把字元串長度設到 *len 中。 這個 Lua 值必須是一個字元串或是一個數字; 否則返回返回 NULL 。 如果值是一個數字, l ua_tolstring 還會 把堆棧中的那個值的實際類型轉換為一個字元串。 (當遍歷一張表的時候, 若把 l ua_tolstring 作用在鍵上, 這個轉換有可能導致 l ua_next 弄錯。)
lu a_tolstring 返回一個已對齊指針 指向 L ua 狀態機中的字元串。 這個字元串總能保證 ( C 要求的)最後一個字元為零 ('