php實現毫秒定時器,基於event擴充套件實現

2021-09-26 04:05:49 字數 1851 閱讀 1417

最近學習workerman框架,由於windows上也可以安裝event擴充套件,所以下面的**也支援在win上執行,

**是參考workerman原始碼的:

<?php

class timer

else

$this->_eventbase = new $class_name();

}/**

* @see eventinte***ce::add()

*/public function add($fd, $flag, $func, $args = array())

else

$param = array($func, (array) $args, $flag, $fd, self::$_timerid);

$event = new $class_name($this->_eventbase, -1, $class_name::timeout | $class_name::persist, array($this, "timercallback"), $param);

if (!$event || !$event->addtimer($fd))

$this->_eventtimer[self::$_timerid] = $event;

return self::$_timerid++;

}/**

* @see events\eventinte***ce::del()

*/public function del($fd, $flag)

return true;

}/**

* timer callback.

* @param null $fd

* @param int $what

* @param int $timer_id

*/public function timercallback($fd, $what, $param)

try catch (\exception $e) catch (\error $e)

}/**

* @see events\eventinte***ce::clearalltimer()

* @return void

*/public function clearalltimer()

$this->_eventtimer = array();

}/**

* @see eventinte***ce::loop()

*/public function loop()

/*** destroy loop.

** @return void

*/public function destroy()

}/**

* get timer count.

** @return integer

*/public function gettimercount()

}//測試執行 timer類

function microtime_float()

$timer = new timer();

$timer->add(0.5, timer::ev_timer, function () );

$timer->add(1, timer::ev_timer_once, function () );

//待刪除的id

$id = $timer->add(5, timer::ev_timer, function () );

//刪除定時器

$timer->add(6, timer::ev_timer_once, function () use ($id, $timer) );

$timer->loop();

php實現毫秒定時器(時間堆)

最近研究workerman原始碼,學習了定時器部分,從裡面抄了乙個定時器出來,單獨出來,有利於理解定時器原理。下面是 呼叫方式跟workerman一樣,都是新增定時事件進去,可以使延時呼叫一次,也可以是定時呼叫,間隔一段事件就執行一次。測試執行,在命令列裡面,執行php timer.php即可。可以...

c實現毫秒 微秒級定時器

秒級定時器,都知道可以用sleep實現,但如果要實現毫秒級呢?usleep?使用select實現 select函式原型 int select int nfds,fd set readfds,fd set writefds,fd set exceptfds,struct timeval timeout...

swoole學習之毫秒定時器

常規定時器 首先想到的就是linux自帶的crontab 不過這個定時器是分鐘級別的.swoole定時器 swoole timer after after time,callback 設定乙個延時器 swoole timer clear timer id 清除指定的定時器 server on ope...