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

workerman Timer動(dòng)態(tài)定時(shí),是否可行

thinkerdev

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

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

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

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

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

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

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

1249 2 3
2個(gè)回答

walkor 打賞

不支持更改定時(shí)器間隔,需要?jiǎng)h除重新添加

  • thinkerdev 2024-01-15

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

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秒運(yùn)行一次,即從上次運(yùn)行后開(kāi)始計(jì)算60秒而不是每60秒;
改了下你試試應(yīng)該OK的。

  • thinkerdev 2024-01-15

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

  • MarkGo 2024-01-16

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

  • thinkerdev 2024-01-19

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

  • zzlasp 2024-03-02

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

年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??