1 ローカル co_time_tbl = {} 2 setmetatable(co_time_tbl、{__len = 機能(O) 3 ローカルカウント= 0 4 のための K、V における ペア(O)がない 5 カウント=カウント+ 1つの 6 端 7 戻りカウント 8 の端部 9 }) 10 11 ローカル 関数isWindows() 12 戻り package.config:サブ(1、1)== " \\ " 13 端部 14 15 ローカル 関数スリープ(n)が 16 であれば(isWindows)次に、 17 であれば、N> 0 、次いで 18 os.execute(" ピング-n " .. TONUMBER(N + 1).. " ローカルホスト> NUL " ) 19 端 20 他 21 os.execute(" スリープ" .. TONUMBER (N)) 22 の端部 23 の端部 24 25 ローカル 関数の更新(deltaTime) 26 - メインループ 27 の端部 28 29 ローカル 関数updateCoroutine() 30 ローカル iTimeの= os.time () 31 用の KCO、VTIME で ペア(co_time_tbl)を行う 32 場合 iTimeの> = VTIME 次いで、 33 であれば コルーチン.status(KCO)== " 中断" または coroutine.status(KCO)== " 正常" 、次いで 34 coroutine.resume(KCO) 35 ELSEIF coroutine.status(KCO)== " デッド" 次に 36 co_time_tbl [KCO] = ゼロ 37 の端 38 の端部 39 の端部 40 の端部 41 42 関数coroutine.waitforSeconds(秒) 43 アサート(タイプ(第2の)== " 番号" 又は第二<= 0 ) 44 ローカル iEndTime = os.time()+ 第 45 ローカル CO =coroutine.running )( 46 場合共、次いで 47 co_time_tbl [CO] = iEndTime 48 戻り coroutine.yield () 49 の端部 50 の端部 51 52 ローカル 関数main()の 53 ローカル CO1 = coroutine.wrap(関数() 54 coroutine.waitforSeconds(5 ) 55 プリント(" 5秒後" ) 56 の端部) 57 ローカル CO2 =coroutine.wrap(関数() 58 coroutine.waitforSeconds(4 ) 59 プリント(" 4秒後" ) 60 の端部) 61 ローカル CO3 = coroutine.wrap(関数() 62 coroutine.waitforSeconds(3 ) 63 プリント(「3後秒" ) 64 エンド) 65 ローカルのカウント= 0 66 ローカル CO4 =coroutine.wrap(関数() 67 間(真)か 68 (coroutine.waitforSecondsを1 ) 69 のカウント= +カウント1つの 70 印刷(" :コルーチンnumは" #co_time_tbl .. " |秒カウント:" ..カウント) 71 端部 72 端部) 73 CO1() 74 CO 2() 75 CO 3() 76 CO4() 77 一方、 真 DO 78 スリープ(0.033 ) 79 更新() 80 updateCoroutine() 81 の端部 82 の端部 83 84メイン()
実際には、アイデアは、ライン上にハングアップしますウェイクアップ時間をコルーチンによると、メインループの後にタイマーを更新し、テーブルで待つコルーチンの時間を維持することです