国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

workerman Timer動態(tài)定時,是否可行

thinkerdev

已有一個定時器,希望在定時器流程結(jié)束時重新調(diào)整定時器的間隔

已經(jīng)onWorkerStart 準(zhǔn)備了一個Timer了,定時為60秒
這個Timer里面有些任務(wù)要執(zhí)行,執(zhí)行中監(jiān)控了時間
比如:目前執(zhí)行時間已經(jīng)到40秒了,待這次任務(wù)完畢后下次我想調(diào)整這個Timer間隔

$timeInt = 60;
Timer:add($timeInt, function(){
    // 任務(wù)處理

    // 假設(shè)到這里已經(jīng)過去40秒

    // 任務(wù)結(jié)束

    // 最后
    // 比如,這里我要調(diào)整 $timeInt = 60 + 40
    // 此時Timer從原來的60秒執(zhí)行一次變?yōu)榱?00秒執(zhí)行一次
})

不知道描述清楚沒有,能不能這么做?或者有其他更好的方案

1207 2 3
2個回答

walkor 打賞

不支持更改定時器間隔,需要刪除重新添加

  • thinkerdev 2024-01-15

    大佬,對于這種需求還有其他好的建議嗎

MarkGo
function task($timeInt=60){
    Timer::add($timeInt,function(){
        try{
            $begTimes = time();
            //do sth
            $nextRunAt = (time() - $begTimes) + $timeInt;
        }catch (\Throwable $e){
        }finally{
            task($nextRunAt);
        }
    },null,false);
}

我需求和你差不多,是需要每次間隔60秒運行一次,即從上次運行后開始計算60秒而不是每60秒;
改了下你試試應(yīng)該OK的。

  • thinkerdev 2024-01-15

    棒啊!函數(shù)體外面是不是還得套一層Timer?還是怎么來執(zhí)行這個函數(shù)

  • MarkGo 2024-01-16

    你可以看看自身場景,我的場景是每次查詢接口都需要等60秒后再執(zhí)行下次查詢,所以我是onWorkerStart時候就調(diào)用(首次查詢),然后通過一次性timer進行下一次的查詢。但按你上面發(fā)出來的信息,應(yīng)該onWorkerStart 的時候直接調(diào)用一次task()就行了,task里面就有Timer默認60秒執(zhí)行,執(zhí)行完再計算下次執(zhí)行時間設(shè)置一次性Timer

  • thinkerdev 2024-01-19

    根據(jù)你的代碼提示改造了一下,可控定時器,nice?。?!

  • zzlasp 2024-03-02

    需要注意下,如果業(yè)務(wù)量大,如果只添加(Timer::add)而不刪除的話,會不會導(dǎo)致生成大量Timer任務(wù)?最好Timer::del一下之前的

年代過于久遠,無法發(fā)表回答
??