<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # swoole\_timer\_tick [TOC] 設置一個間隔時鐘定時器,與`after`定時器不同的是`tick`定時器會持續觸發,直到調用`swoole_timer_clear`清除。 ~~~ int swoole_timer_tick(int $msec, callable $callback, [$mixed $param]); ~~~ * `$msec`指定時間,單位為毫秒。如`1000`表示`1秒`,最大不得超過`86400000` * `$callback_function`時間到期后所執行的函數,必須是可以調用的 * 可以使用匿名函數的`use`語法傳遞參數到回調函數中 * 定時器僅在當前進程空間內有效 * 定時器是純異步實現的,不能與阻塞IO的函數一起使用,否則定時器的執行時間會發生錯亂 > 定時器在執行的過程中可能存在一定誤差 ## 回調函數 定時器觸發的回調函數接受`2`個參數。第二個參數 $param 為可選參數 ~~~ function callbackFunction(int $timer_id, [$mixed $param]); ~~~ * `$timer_id`定時器的ID,可用于`swoole_timer_clear`清除此定時器 * `$params`由`swoole_timer_tick`傳入的第三個參數$param,此參數也為可選參數 ## 定時器校正 定時器回調函數的執行時間不影響下一次定時器執行的時間。實例:在`0.002s`設置了`10ms`的`tick`定時器,第一次會在`0.012s`執行回調函數,如果回調函數執行了`5ms`,下一次定時器仍然會在`0.022s`時觸發,而不是`0.027s`。 但如果定時器回調函數的執行時間過長,甚至覆蓋了下一次定時器執行的時間。底層會進行時間校正,丟棄已過期的行為,在下一時間回調。如上面例子中`0.012s`時的回調函數執行了`15ms`,本該在`0.022s`產生一次定時回調。實際上本次定時器在`0.027s`才返回,這時定時早已過期。底層會在`0.032s`時再次觸發定時器回調。 ## 協程模式 在協程環境下`swoole_timer_tick`回調中會自動創建一個協程,可以直接使用協程相關`API`,無需調用`go`創建協程。 > 可設置`enable_coroutine`關閉自動創建協程 ## 使用示例 ~~~ swoole_timer_tick(1000, function(){ echo "timeout\n"; }); ~~~ **正確示例** ~~~ swoole_timer_tick(3000, function () { echo "after 3000ms.\n"; swoole_timer_after(14000, function () { echo "after 14000ms.\n"; }); }); ~~~ **錯誤示例** ~~~ swoole_timer_tick(3000, function () { echo "after 3000ms.\n"; sleep(14); echo "after 14000ms.\n"; }); ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看