本文整理汇总了PHP中time_sleep_until函数的典型用法代码示例。如果您正苦于以下问题:PHP time_sleep_until函数的具体用法?PHP time_sleep_until怎么用?PHP time_sleep_until使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了time_sleep_until函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: process
/**
* Make the script sleep during a given delay
*
* @param TryAgain\Handler $handler
*/
public function process(Handler $handler)
{
$delay = $this->getFibonacciNumber();
if ($delay > 0) {
time_sleep_until(microtime(true) + $delay);
}
}
示例2: run
/**
* 运行守护进程,归档日志文件。
*
* @see ZtChart_Model_Monitor_Abstract::run()
*/
public function run()
{
sleep($this->_console->getDelayTimestamp());
while (true) {
$this->_timestamp = $timestamp = time();
$deadlineTimestamp = $timestamp - self::CYCLE_TIMESTAMP;
$this->import($this->_console->getLogPaths(), $deadlineTimestamp);
$storage = new ZtChart_Model_Storage('monitor', 'archive');
$storage->write($deadlineTimestamp);
time_sleep_until($timestamp + self::CYCLE_TIMESTAMP);
}
}
示例3: tickProcessor
private function tickProcessor()
{
while (!$this->server->isShutdown()) {
$start = microtime(true);
$this->tick();
$time = microtime(true);
if ($time - $start < 0.01) {
@time_sleep_until($time + 0.01 - ($time - $start));
}
}
$this->tick();
$this->socket->close();
}
示例4: tickProcessor
private function tickProcessor()
{
$this->lastMeasure = \microtime(\true);
while (!$this->shutdown) {
$start = \microtime(\true);
$max = 5000;
while (--$max and $this->receivePacket()) {
}
while ($this->receiveStream()) {
}
$time = \microtime(\true) - $start;
if ($time < 0.05) {
\time_sleep_until(\microtime(\true) + 0.05 - $time);
}
$this->tick();
}
}
示例5: onCommand
public function onCommand(ConsoleCommandEvent $event)
{
$output = $event->getOutput();
$input = new ArgvInput();
try {
$input->bind($this->getDefinition());
} catch (\RuntimeException $e) {
}
$delay = filter_var($input->getOption('delay'), FILTER_VALIDATE_INT);
if ($delay > 0) {
$wakeupAt = time() + mt_rand(1, $delay);
$output->writeln('<comment>Waiting until ' . date('Y-m-d H:i:s', $wakeupAt) . ' eRepublik time.</comment>');
time_sleep_until($wakeupAt);
}
$this->configPath = $input->getOption('config');
$this->loadConfig();
}
示例6: shootThenGo
/**
* @param int $shootTime
* @param int $stopTime
*
* @return \Generator
*/
public function shootThenGo($shootTime, $stopTime)
{
$entry = time();
$timestamp = $shootTime;
while (true) {
if ($timestamp > $stopTime) {
break;
}
if ($timestamp > time()) {
time_sleep_until($timestamp);
}
(yield $timestamp);
if ($timestamp < $entry) {
$timestamp = $entry;
continue;
}
++$timestamp;
}
}
示例7: run
/**
* Schedules jobs, sleeps until a job has to be scheduled. Returns
* when jobs were scheduled.
*
* @return int Number of scheduled jobs.
*/
function run()
{
$now = new DateTime('now');
$sleep = min(array_map(function ($entry) use($now) {
list($expression, $job) = $entry;
return $expression->getNextRunDate($now)->getTimestamp();
}, $this->entries));
time_sleep_until($sleep);
$scheduled = 0;
foreach ($this->entries as $entry) {
list($expression, $job) = $entry;
if ($expression->isDue($now)) {
$this->queue->push($job);
$scheduled += 1;
}
}
$this->queue->flush();
return $scheduled;
}
示例8: remove_obsolete_hublocs
function remove_obsolete_hublocs()
{
logger('remove_obsolete_hublocs', LOGGER_DEBUG);
// Get rid of any hublocs which are ours but aren't valid anymore -
// e.g. they point to a different and perhaps transient URL that we aren't using.
// I need to stress that this shouldn't happen. fix_system_urls() fixes hublocs
// when it discovers the URL has changed. So it's unclear how we could end up
// with URLs pointing to the old site name. But it happens. This may be an artifact
// of an old bug or maybe a regression in some newer code. In any event, they
// mess up communications and we have to take action if we find any.
// First make sure we have any hublocs (at all) with this URL and sitekey.
// We don't want to perform this operation while somebody is in the process
// of renaming their hub or installing certs.
$r = q("select hubloc_id from hubloc where hubloc_url = '%s' and hubloc_sitekey = '%s'", dbesc(z_root()), dbesc(get_config('system', 'pubkey')));
if (!$r || !count($r)) {
return;
}
$channels = array();
// Good. We have at least one *valid* hubloc.
// Do we have any invalid ones?
$r = q("select hubloc_id from hubloc where hubloc_sitekey = '%s' and hubloc_url != '%s'", dbesc(get_config('system', 'pubkey')), dbesc(z_root()));
$p = q("select hubloc_id from hubloc where hubloc_sitekey != '%s' and hubloc_url = '%s'", dbesc(get_config('system', 'pubkey')), dbesc(z_root()));
if (is_array($r) && is_array($p)) {
$r = array_merge($r, $p);
}
if (!$r) {
return;
}
// We've got invalid hublocs. Get rid of them.
logger('remove_obsolete_hublocs: removing ' . count($r) . ' hublocs.');
$interval = get_config('system', 'delivery_interval') !== false ? intval(get_config('system', 'delivery_interval')) : 2;
foreach ($r as $rr) {
q("update hubloc set hubloc_deleted = 1 where hubloc_id = %d", intval($rr['hubloc_id']));
$x = q("select channel_id from channel where channel_hash = '%s' limit 1", dbesc($rr['hubloc_hash']));
if ($x) {
Zotlabs\Daemon\Master::Summon(array('Notifier', 'location', $x[0]['channel_id']));
if ($interval) {
@time_sleep_until(microtime(true) + (double) $interval);
}
}
}
}
示例9: runAsDaemon
/**
* Keep the app running as a daemon.
*
* The app sends a report every X seconds as defined in the daemon.interval config setting.
*
* @throws Exceptions\EnsureException if config settings are wrong
*/
protected function runAsDaemon()
{
// interval (in seconds) between sending reports.
$interval = $this->cfg('daemon.interval');
Ensure::that($interval > $this->cfg('http.timeout'), 'daemon.interval must be larger than http.timeout in order to run as daemon');
// start of the reporting
$start = microtime(true);
// A practically endless loop
// 64 bit signed integers gives us 292,471,208,678 years of runtime with 1-second intervals
// 32 bit signed integers gives us 69 years of runtime with 1-second intervals
for ($i = 0; true; ++$i) {
// The ideal starting time of this iteration
$this_iteration_start = $start + $interval * $i;
// The ideal starting time of the next iteration
$next_iteration_start = $this_iteration_start + $interval;
// Send the report. This may take a few seconds.
try {
$this->sendReport();
} catch (Exception $e) {
$this->warning('Could not send report to remote server: {message}', ['message' => $e->getMessage()]);
}
// Sleep until next iteration should start
time_sleep_until($next_iteration_start);
}
}
示例10: enforce_min_exec_time
/**
* Enforce the minimum execution time. Call this at the end of your long
* processing to make sure that it doesn't take less time than the
* minimum execution time. This is used to avoid being blocked by
* overzealous server protection solutions.
*
* @return void
*/
public function enforce_min_exec_time()
{
// Try to get a sane value for PHP's maximum_execution_time INI parameter
if (@function_exists('ini_get')) {
$php_max_exec = @ini_get("maximum_execution_time");
} else {
$php_max_exec = 10;
}
if ($php_max_exec == "" || $php_max_exec == 0) {
$php_max_exec = 10;
}
// Decrease $php_max_exec time by 500 msec we need (approx.) to tear down
// the application, as well as another 500msec added for rounding
// error purposes. Also make sure this is never going to be less than 0.
$php_max_exec = max($php_max_exec * 1000 - 1000, 0);
// Get the "minimum execution time per step" Akeeba Backup configuration variable
$minexectime = $this->min_exec_time;
if (!is_numeric($minexectime)) {
$minexectime = 0;
}
// Make sure we are not over PHP's time limit!
if ($minexectime > $php_max_exec) {
$minexectime = $php_max_exec;
}
// Get current running time
$elapsed_time = $this->getRunningTime() * 1000;
// Only run a sleep delay if we haven't reached the minexectime execution time
if ($minexectime > $elapsed_time && $elapsed_time > 0) {
$sleep_msec = $minexectime - $elapsed_time;
if (function_exists('usleep')) {
usleep(1000 * $sleep_msec);
} elseif (function_exists('time_nanosleep')) {
$sleep_sec = floor($sleep_msec / 1000);
$sleep_nsec = 1000000 * ($sleep_msec - $sleep_sec * 1000);
time_nanosleep($sleep_sec, $sleep_nsec);
} elseif (function_exists('time_sleep_until')) {
$until_timestamp = time() + $sleep_msec / 1000;
time_sleep_until($until_timestamp);
} elseif (function_exists('sleep')) {
$sleep_sec = ceil($sleep_msec / 1000);
sleep($sleep_sec);
}
} elseif ($elapsed_time > 0) {
// No sleep required, even if user configured us to be able to do so.
}
}
示例11: ratenotif_run
function ratenotif_run($argv, $argc)
{
cli_startup();
$a = get_app();
require_once "session.php";
require_once "datetime.php";
require_once 'include/items.php';
require_once 'include/Contact.php';
if ($argc < 3) {
return;
}
logger('ratenotif: invoked: ' . print_r($argv, true), LOGGER_DEBUG);
$cmd = $argv[1];
$item_id = $argv[2];
if ($cmd === 'rating') {
$r = q("select * from xlink where xlink_id = %d and xlink_static = 1 limit 1", intval($item_id));
if (!$r) {
logger('rating not found');
return;
}
$encoded_item = array('type' => 'rating', 'encoding' => 'zot', 'target' => $r[0]['xlink_link'], 'rating' => intval($r[0]['xlink_rating']), 'rating_text' => $r[0]['xlink_rating_text'], 'signature' => $r[0]['xlink_sig'], 'edited' => $r[0]['xlink_updated']);
}
$channel = channelx_by_hash($r[0]['xlink_xchan']);
if (!$channel) {
logger('no channel');
return;
}
$primary = get_directory_primary();
if (!$primary) {
return;
}
$interval = get_config('system', 'delivery_interval') !== false ? intval(get_config('system', 'delivery_interval')) : 2;
$deliveries_per_process = intval(get_config('system', 'delivery_batch_count'));
if ($deliveries_per_process <= 0) {
$deliveries_per_process = 1;
}
$deliver = array();
$x = z_fetch_url($primary . '/regdir');
if ($x['success']) {
$j = json_decode($x['body'], true);
if ($j && $j['success'] && is_array($j['directories'])) {
foreach ($j['directories'] as $h) {
if ($h == z_root()) {
continue;
}
$hash = random_string();
$n = zot_build_packet($channel, 'notify', null, null, $hash);
q("insert into outq ( outq_hash, outq_account, outq_channel, outq_driver, outq_posturl, outq_async, outq_created, outq_updated, outq_notify, outq_msg ) values ( '%s', %d, %d, '%s', '%s', %d, '%s', '%s', '%s', '%s' )", dbesc($hash), intval($channel['channel_account_id']), intval($channel['channel_id']), dbesc('zot'), dbesc($h . '/post'), intval(1), dbesc(datetime_convert()), dbesc(datetime_convert()), dbesc($n), dbesc(json_encode($encoded_item)));
$deliver[] = $hash;
if (count($deliver) >= $deliveries_per_process) {
proc_run('php', 'include/deliver.php', $deliver);
$deliver = array();
if ($interval) {
@time_sleep_until(microtime(true) + (double) $interval);
}
}
}
// catch any stragglers
if (count($deliver)) {
proc_run('php', 'include/deliver.php', $deliver);
}
}
}
logger('ratenotif: complete.');
return;
}
示例12: run
public function run()
{
$this->add_category('default', array('humanice' => true), PUBLICY);
$this->cron = Cron::factory();
$this->cron->attach($this);
$this->lou = LoU::factory($this->server, $this->email, $this->password, $this->debug);
if ($this->debug) {
$this->log("Entered debugmode!");
}
$this->lou->attach($this);
$this->lou->get_self();
$this->forum = Forum::factory($this->lou);
$this->igm = Igm::factory($this->lou);
$this->load_hooks();
$this->globalchat = defined('GLOBALCHAT') ? GLOBALCHAT : false;
$this->lou->get_self_alliance();
$this->lou->setAllianceAllowOnline(true);
while ($this->lou->isConnected(true)) {
$slepp_until = time() + POLLTRIP;
$event = $this->cron->check();
$chat = $this->lou->check();
if (time() < $slepp_until) {
time_sleep_until($slepp_until);
}
}
}
示例13: build_sync_packet
/**
* Send a zot packet to all hubs where this channel is duplicated, refreshing
* such things as personal settings, channel permissions, address book updates, etc.
*
* @param int $uid
* @param array $packet (optional) default null
* @param boolean $groups_changed (optional) default false
*/
function build_sync_packet($uid = 0, $packet = null, $groups_changed = false)
{
$a = get_app();
logger('build_sync_packet');
if ($packet) {
logger('packet: ' . print_r($packet, true), LOGGER_DATA);
}
if (!$uid) {
$uid = local_channel();
}
if (!$uid) {
return;
}
$r = q("select * from channel where channel_id = %d limit 1", intval($uid));
if (!$r) {
return;
}
$channel = $r[0];
if (intval($channel['channel_removed'])) {
return;
}
$h = q("select * from hubloc where hubloc_hash = '%s' and hubloc_deleted = 0", dbesc($channel['channel_hash']));
if (!$h) {
return;
}
$synchubs = array();
foreach ($h as $x) {
if ($x['hubloc_host'] == $a->get_hostname()) {
continue;
}
$synchubs[] = $x;
}
if (!$synchubs) {
return;
}
$r = q("select xchan_guid, xchan_guid_sig from xchan where xchan_hash = '%s' limit 1", dbesc($channel['channel_hash']));
if (!$r) {
return;
}
$env_recips = array();
$env_recips[] = array('guid' => $r[0]['xchan_guid'], 'guid_sig' => $r[0]['xchan_guid_sig']);
$info = $packet ? $packet : array();
$info['type'] = 'channel_sync';
$info['encoding'] = 'red';
// note: not zot, this packet is very red specific
if (array_key_exists($uid, $a->config) && array_key_exists('transient', $a->config[$uid])) {
$settings = $a->config[$uid]['transient'];
if ($settings) {
$info['config'] = $settings;
}
}
if ($channel) {
$info['channel'] = array();
foreach ($channel as $k => $v) {
// filter out any joined tables like xchan
if (strpos($k, 'channel_') !== 0) {
continue;
}
// don't pass these elements, they should not be synchronised
$disallowed = array('channel_id', 'channel_account_id', 'channel_primary', 'channel_prvkey', 'channel_address', 'channel_deleted', 'channel_removed', 'channel_system');
if (in_array($k, $disallowed)) {
continue;
}
$info['channel'][$k] = $v;
}
}
if ($groups_changed) {
$r = q("select hash as collection, visible, deleted, name from groups where uid = %d", intval($uid));
if ($r) {
$info['collections'] = $r;
}
$r = q("select groups.hash as collection, group_member.xchan as member from groups left join group_member on groups.id = group_member.gid where group_member.uid = %d", intval($uid));
if ($r) {
$info['collection_members'] = $r;
}
}
$interval = get_config('system', 'delivery_interval') !== false ? intval(get_config('system', 'delivery_interval')) : 2;
logger('build_sync_packet: packet: ' . print_r($info, true), LOGGER_DATA);
foreach ($synchubs as $hub) {
$hash = random_string();
$n = zot_build_packet($channel, 'notify', $env_recips, $hub['hubloc_sitekey'], $hash);
q("insert into outq ( outq_hash, outq_account, outq_channel, outq_driver, outq_posturl, outq_async, outq_created, outq_updated, outq_notify, outq_msg ) values ( '%s', %d, %d, '%s', '%s', %d, '%s', '%s', '%s', '%s' )", dbesc($hash), intval($channel['channel_account']), intval($channel['channel_id']), dbesc('zot'), dbesc($hub['hubloc_callback']), intval(1), dbesc(datetime_convert()), dbesc(datetime_convert()), dbesc($n), dbesc(json_encode($info)));
proc_run('php', 'include/deliver.php', $hash);
if ($interval) {
@time_sleep_until(microtime(true) + (double) $interval);
}
}
}
示例14: do_delivery
function do_delivery($deliveries)
{
if (!(is_array($deliveries) && count($deliveries))) {
return;
}
$interval = get_config('system', 'delivery_interval') !== false ? intval(get_config('system', 'delivery_interval')) : 2;
$deliveries_per_process = intval(get_config('system', 'delivery_batch_count'));
if ($deliveries_per_process <= 0) {
$deliveries_per_process = 1;
}
$deliver = array();
foreach ($deliveries as $d) {
$deliver[] = $d;
if (count($deliver) >= $deliveries_per_process) {
proc_run('php', 'include/deliver.php', $deliver);
$deliver = array();
if ($interval) {
@time_sleep_until(microtime(true) + (double) $interval);
}
}
}
// catch any stragglers
if ($deliver) {
proc_run('php', 'include/deliver.php', $deliver);
}
}
示例15: notifier_run
//.........这里部分代码省略.........
foreach ($r as $rr) {
$recipients[] = $rr['id'];
}
}
}
}
if ($followup) {
$recip_str = $parent['contact-id'];
} else {
$recip_str = implode(', ', $recipients);
}
$r = q("SELECT * FROM `contact` WHERE `id` IN ( %s ) AND `blocked` = 0 AND `pending` = 0 ", dbesc($recip_str));
require_once 'include/salmon.php';
$interval = get_config('system', 'delivery_interval') === false ? 2 : intval(get_config('system', 'delivery_interval'));
// delivery loop
if (count($r)) {
foreach ($r as $contact) {
if (!$mail && !$fsuggest && !$followup && !$contact['self']) {
if ($contact['network'] === NETWORK_DIASPORA && $public_message) {
continue;
}
q("insert into deliverq ( `cmd`,`item`,`contact` ) values ('%s', %d, %d )", dbesc($cmd), intval($item_id), intval($contact['id']));
}
}
foreach ($r as $contact) {
if ($contact['self']) {
continue;
}
// potentially more than one recipient. Start a new process and space them out a bit.
// we will deliver single recipient types of message and email receipients here.
if (!$mail && !$fsuggest && !$followup) {
proc_run('php', 'include/delivery.php', $cmd, $item_id, $contact['id']);
if ($interval) {
@time_sleep_until(microtime(true) + (double) $interval);
}
continue;
}
$deliver_status = 0;
logger("main delivery by notifier: followup={$followup} mail={$mail} fsuggest={$fsuggest}");
switch ($contact['network']) {
case NETWORK_DFRN:
// perform local delivery if we are on the same site
$basepath = implode('/', array_slice(explode('/', $contact['url']), 0, 3));
if (link_compare($basepath, $a->get_baseurl())) {
$nickname = basename($contact['url']);
if ($contact['issued-id']) {
$sql_extra = sprintf(" AND `dfrn-id` = '%s' ", dbesc($contact['issued-id']));
} else {
$sql_extra = sprintf(" AND `issued-id` = '%s' ", dbesc($contact['dfrn-id']));
}
$x = q("SELECT\t`contact`.*, `contact`.`uid` AS `importer_uid`, \n\t\t\t\t\t\t\t`contact`.`pubkey` AS `cpubkey`, \n\t\t\t\t\t\t\t`contact`.`prvkey` AS `cprvkey`, \n\t\t\t\t\t\t\t`contact`.`thumb` AS `thumb`, \n\t\t\t\t\t\t\t`contact`.`url` as `url`,\n\t\t\t\t\t\t\t`contact`.`name` as `senderName`,\n\t\t\t\t\t\t\t`user`.* \n\t\t\t\t\t\t\tFROM `contact` \n\t\t\t\t\t\t\tLEFT JOIN `user` ON `contact`.`uid` = `user`.`uid` \n\t\t\t\t\t\t\tWHERE `contact`.`blocked` = 0 AND `contact`.`pending` = 0\n\t\t\t\t\t\t\tAND `contact`.`network` = '%s' AND `user`.`nickname` = '%s'\n\t\t\t\t\t\t\t{$sql_extra}\n\t\t\t\t\t\t\tAND `user`.`account_expired` = 0 LIMIT 1", dbesc(NETWORK_DFRN), dbesc($nickname));
if (count($x)) {
require_once 'library/simplepie/simplepie.inc';
logger('mod-delivery: local delivery');
local_delivery($x[0], $atom);
break;
}
}
logger('notifier: dfrndelivery: ' . $contact['name']);
$deliver_status = dfrn_deliver($owner, $contact, $atom);
logger('notifier: dfrn_delivery returns ' . $deliver_status);
if ($deliver_status == -1) {
logger('notifier: delivery failed: queuing message');
// queue message for redelivery
add_to_queue($contact['id'], NETWORK_DFRN, $atom);
}