protected function _callTimeHandlers()
    {
        foreach ($this->_timehandler as &$handlerinfo) {
            $microtimestamp = microtime(true);
            if ($microtimestamp >= $handlerinfo['lastmicrotimestamp']
                + ($handlerinfo['interval'] / 1000.0)
            ) {
                $callback = $handlerinfo['callback'];
                $handlerinfo['lastmicrotimestamp'] = $microtimestamp;

                $cbstring = (is_array($callback))
                    ? (is_object($callback[0])
                        ? get_class($callback[0])
                        : $callback[0]
                      ) . '->' . $callback[1]
                    : '(anonymous function)';

                if (is_callable($callback)) {
                    $this->log(SMARTIRC_DEBUG_TIMEHANDLER, 'DEBUG_TIMEHANDLER: calling "'.$cbstring.'"',
                        __FILE__, __LINE__
                    );
                    call_user_func($callback, $this);
                } else {
                    $this->log(SMARTIRC_DEBUG_TIMEHANDLER,
                        'DEBUG_TIMEHANDLER: callback is invalid! "'.$cbstring.'"',
                        __FILE__, __LINE__
                    );
                }
            }
        }
    }