php - 计算循环内的确切 sleep 时间

标签 php algorithm

我正在尝试按循环的升序计算确切的循环时间。

这是我尝试过的...

$tasks = array(
    array(
        'halt' => 5,
        'task' => 'first'
    ),
    array(
        'halt' => 10,
        'task' => 'second'
    ),
    array(
        'halt' => 15,
        'task' => 'third'
    ),
);

$halt_time = 0;
foreach($tasks as $task){
    $halt_time = $halt_time > 0 ? $task['halt'] - $halt_time : $halt_time + $task['halt'];
    if ($halt_time > 0) sleep($halt_time);
}

这行得通,它根据正确的时间运行循环,但是当暂停时间相同时会失败,例如,它不会正确处理以下数组...

$tasks = array(
    array(
        'halt' => 5,
        'task' => 'first'
    ),
    array(
        'halt' => 5,
        'task' => 'second'
    ),
    array(
        'halt' => 5,
        'task' => 'third'
    ),
);

在这种情况下,它应该只在第一个任务之前等待 5 秒,然后运行每个任务。

我想解释一下 - 如果它在前一个任务中已经睡了 5 秒,那么它不应该在第二个任务中睡 15 秒,所以 - sleep(5) 对于第一个任务,以及 sleep(10) 用于第二个任务。

我在计算公式中缺少什么。请建议。谢谢

最佳答案

如果您只计算等待的秒数,然后也检查此值会怎样?简短但未经测试的代码。

$halt_time       = 0;
$total_wait_time = 0;
foreach ($tasks as $task) {
    print_r(sprintf("starting %6s task at %s", $task['task'], date("H:i:s")));
    $halt_time = $task['halt'];
    if ($total_wait_time <= $halt_time) {
        $halt_time = $halt_time - $total_wait_time;
    }

    if ($halt_time > 0 || $total_wait_time === 0) {
        sleep($halt_time);
        $total_wait_time += $halt_time;
    }
    print_r(sprintf(", finished at %s\n", date("H:i:s")));
}

对于第一个数组,输出是:

starting  first task at 19:29:28, finished at 19:29:33
starting second task at 19:29:33, finished at 19:29:38
starting  third task at 19:29:38, finished at 19:29:43

对于第二个:

starting  first task at 19:30:58, finished at 19:31:03
starting second task at 19:31:03, finished at 19:31:03
starting  third task at 19:31:03, finished at 19:31:03

希望这就是您所需要的,否则我误解了您的问题。

关于php - 计算循环内的确切 sleep 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38100077/

相关文章:

algorithm - 多源多目的地最短路径

arrays - 总和至少为 K 的最小数字集

php - 如何从php中所有文件的文件夹目录中只获取视频文件?

php - 测量类里面函数之间的时间?

php - MySql数据库设计——哪种表结构更好?

添加节点的效果未知时寻找最便宜路径的算法

performance - 优化一组多项式以提高计算速度

algorithm - 经典游戏 "Circle the Cat"算法?

php fopen , str_replace

javascript - AngularJs $http 在页面加载时发布