无限循环+延迟执行来实现计划任务 转载

今天看到这么一段代码:

do {
    $res = $this->tasks_db->get_one(array(‘taskid‘ => $taskid));
    // 得到下次运行时间
    $interval = $res[‘tasktime‘] * 60;
    //检测本次任务开关,0为关闭,1为继续,如果退出,写入日志
    if ($res["taskswitch"] == 0) {
        $ltime = time();
        $this->tasks_db->update(array(‘taskon‘ => 0), array(‘taskid‘ => $taskid));
        $this->tasks_log_db->insert(array(‘logtaskid‘ => $taskid, ‘loginfo‘ => ‘结束‘, ‘logtime‘ => time(), ‘logsize‘ => ‘NONE‘));
        exit();
    }
    //检测最终任务状态,执行最关键一步
    if ($res) {
        $html = pc_base::load_app_class(‘html‘, ‘content‘); //加载pc 生成页面的类
        $filesize = $html->index(); //生成页面并得到页面大小
        $lsize = sizecount($filesize); //格式化文件大小
        $ltime = time(); //记录任务完毕的时间并写入日志
        $this->tasks_log_db->insert(array(‘logtaskid‘ => $taskid, ‘loginfo‘ => ‘成功‘, ‘logtime‘ => $ltime, ‘logsize‘ => $lsize));
        sleep($interval); // 等待一个周期
    } else {
        exit(); //找不到任务时停止(适用于删除了已经开始的任务)
    }
} while (true); //无限循环

代码也看到了,主要是通过PHP的ignore_user_abort(),set_time_limit(0),sleep()外加一个无限循环来延续这个程序的执行生命周期!

转载:水平凡‘s Blog » 无限循环+延迟执行来实现计划任务

时间: 2024-08-27 15:17:28

无限循环+延迟执行来实现计划任务 转载的相关文章

socket执行accept函数时没有进入阻塞状态,而是陷入了无限循环

接着前两天继续看<VC深入详解>的网络编程部分,这次我快速看了遍书上的函数以及套接字C-S模型,然后自己从0开始写了个简单的服务端,结果发现一直在输出 而明明我还没有写客户端程序,由于打印的代码只有一处,在如下的while循环里 while (true) { /* 5. 接收客户端发送的连接请求 */ SOCKET sockConnect = accept(sockServer, (SOCKADDR*)&addrClient, &len); /* 6. [发送/接收]数据 */

JS实现停留几秒sleep,Js中for循环的阻塞机制,setTimeout延迟执行

//第一种,使用while循环 function sleep(delay) { var start = (new Date()).getTime(); while((new Date()).getTime() - start < delay) { continue; } } //或者使用for循环 function sleep(delay) { for(var t = Date.now(); Date.now() - t <= d;); } 这种实现方式是利用一个伪死循环阻塞主线程.因为JS是

IOS开发系列--无限循环的图片浏览器

--UIKit之UIScrollView 概述 UIKit框架中有大量的控件供开发者使用,在iOS开发中不仅可以直接使用这些控件还可以在这些控件的基础上进行扩展打造自己的控件.在这个系列中如果每个控件都介绍一遍确实没有必要,所谓授人以鱼不如授人以渔,这里会尽可能让大家明白其中的原理,找一些典型的控件进行说明,这样一来大家就可以触类旁通.今天我们主要来看一下UIScrollView的内容: UIView UIScrollView 实战--图片浏览器 UIView 在熟悉UIScrollView之前

Ubuntu中输入startx并重启后登录界面无限循环问题

今天,在学习了编程两个多月后遇到的第一个菜鸟技术问题,解决后有一种兴奋和迷茫. 言归正传,说说遇到的问题和解决方案. 在Ubuntu14.04中,按照linux的传统做法(基于redhat),在root下输入了startx并enter,结果出现了一个没有任何图标的界面,没有任何命令可以输入,于是选择重启,那么问题来了. 重启后进入登录界面,但是正确输入密码后还是输入密码的无限循环,纠结...Google.百度后发现原来有好多菜鸟也有同样的问题,于是对此问题进行了探讨学习. 先说解决方案: (1)

(原创)c#学习笔记04--流程控制04--循环04--循环中断和无限循环

4.4.4  循环的中断 有时需要更精细地控制循环代码的处理.C#为此提供了4个命令,其中的3个已经在其他情形中介绍过了:?  break——立即终止循环.?  continue——立即终止当前的循环(继续执行下一次循环).?  goto——可以跳出循环,到已标记好的位置上(如果希望代码易于阅读和理解,最好不要使用该命令).?  return——跳出循环及其包含的函数(参见第6章).?  break命令可退出循环,继续执行循环后面的第一行代码 4.4.5  无限循环 可以通过编写错误代码或错误的

nodejs延迟执行

setImmediate方法和process.nextTick()方法都是延迟执行的方法,先来看下面一个例子,来区别两者的区别. process.nextTick(function(args){ console.log("nextTick延迟执行!"); }); setImmediate(function(args){ console.log("setImmediate延迟执行!"); }); console.log("正常执行!"); //正常

一行代码引入 ViewPager 无限循环 + 页码显示

(出处:http://www.cnblogs.com/linguanh) 前序: 网上的这类 ViewPager 很多,但是很多都不够好,体现在 bug多.对少页面不支持,例如1~2张图片.功能整合不全(无限+页码)等等,本类由我从零到无完成的,基本已找完 bug,注释丰富,方便大家理解. 特点: 1,代码量少 , 共两个类,约合 310 行代码 (除去注释) 2,可扩展 , 再加个 handler 即可实现自动轮播 3,时间复杂度低 4,耦合度低,只依赖了 imageLoader,可以自己切换

LINQ之路 6:延迟执行(Deferred Execution)

LINQ中大部分查询运算符都有一个非常重要的特性:延迟执行.这意味着,他们不是在查询创建的时候执行,而是在遍历的时候执行(换句话说,当enumerator的MoveNext方法被调用时).让我们考虑下面这个query: static void TestDeferredExecution() { var numbers = new List<int>(); numbers.Add(1); IEnumerable<int> query = numbers.Select(n =>

LINQ 学习路程 -- 查询操作 Deferred Execution of LINQ Query 延迟执行

延迟执行是指一个表达式的值延迟获取,知道它的值真正用到. 当你用foreach循环时,表达式才真正的执行. 延迟执行有个最重要的好处:它总是给你最新的数据 实现延迟运行 你可以使用yield关键字实现延迟加载 public static class EnumerableExtensionMethods { public static IEnumerable<Student> GetTeenAgerStudents(this IEnumerable<Student> source)