【问题标题】:Timed script/function in LuaLua 中的定时脚本/函数
【发布时间】:2013-05-08 06:08:21
【问题描述】:

朋友们早上好...我正在为移动应用程序使用 Lua 脚本语言,并且有以下要求 -

该应用程序的主要目的是为个人安排与医生的约会。 因此,一旦安排了用户的约会,例如5 月 8 日下午 4:30,用户应该在一个小时前收到“提醒警报”,即下午 3:30。

我对如何完成这件事完全一头雾水。 我可以获取用户的日期时间值并使用 函数 应该在该日期时间的 60 分钟之前调用的逻辑。该功能包含我的“警报消息”。 但是如何做到这一点?

谁能给我一点线索?

如果需要任何其他输入,请告诉我...

提前致谢。

【问题讨论】:

    标签: lua mobile-application


    【解决方案1】:

    我会采取这样的方法:

    1.

    将每个约会的详细信息存储为包含 JSON 或 Lua 表格数据的 .txt 文件,如下所示:

    {
        date = "14:30 01/07/2013";
        dateBooked = "09:30 23/06/2013";
        venue = "31 Dentist Street";
        appointmentType = "Routine Teeth Cleaning";
    }
    

    2.

    你可以有一个像这样的计时器类

    Timer = {}
    Timer_mt = { __index = Timer; __add = function(a,b) a:tickBy(b) end ; }
    
    function Timer:new(delayTime,callBack)
        local timer = {callBack=callBack}
    
        timer.initTime = os.date() --MM/DD/YY HH:MM:SS
    
        --delayTime = HH:MM:SS
        _,_,hour,minute,second = string.find(delayTime,"(%d%d):(%d%d):(%d%d)")
        timer.delay = {hour=hour,minute=minute,second=second}
    
        --time the timer started
        _,_,hour,minute,second = string.find(timer.initTime,"(%d%d):(%d%d):(%d%d)")
        timer.startTime = {hour=hour,minute=minute,second=second}
    
        --time the timer started
        timer.initTime = os.date() --MM/DD/YY HH:MM:SS
        print(timer.initTime)
        _,_,hour,minute,second = string.find(timer.initTime,"(%d%d):(%d%d):(%d%d)")
        timer.currentTime = {hour=hour,minute=minute,second=second}
        return setmetatable(timer,Timer_mt)
    end
    
    function Timer:tick() --returns true if time expired
        currTime = os.date() --MM/DD/YY HH:MM:SS
        _,_,chour,cminute,csecond = string.find(currTime,"(%d%d):(%d%d):(%d%d)")
        if chour - self.startTime.hour >= tonumber(self.delay.hour) and cminute - self.startTime.minute >= tonumber(self.delay.minute) and csecond - self.startTime.second > tonumber(self.delay.second) then
            self:callBack()
            self.startTime.hour,self.startTime.minute, self.startTime.second = chour,cminute,csecond
            --return true
        end
        --return false
    end
    
    t = Timer:new("00:00:02",function () print("DONE") end)
    print(t.currentTime.hour,t.currentTime.minute,t.currentTime.second)
    while t:tick() or true do
        io.read()
    end
    

    (我只是编造了这个,所以我建议你测试一下,但它似乎对我有用)。

    3. 在启动时,或添加新约会时创建一个新计时器,然后在主执行期间的某个时间点每个tick(),您甚至可以拥有一个计时器,它是您唯一的计时器tick(),它是回调ticks()其他人...无论如何设置每个计时器的回调以显示警报

    【讨论】:

    • 如果您不断地轮询时间,您的手机将喜欢它。它会通过果汁用完来向您显示。框架通常有一个内置的计时器来执行此操作。此外,您应该始终将格式传递给os.date(),因为默认返回值取决于系统。您可能需要查看特殊格式 "*t"
    • @dualed 好点,但在不知道他/她将使用哪个框架的情况下,我无法在这方面改进我的答案。
    猜你喜欢
    • 1970-01-01
    • 2016-09-15
    • 2014-03-10
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    相关资源
    最近更新 更多