在Lua中使用定时脚本/函数

大家早上好... 我正在为移动应用程序使用 Lua 脚本语言进行开发,并有以下要求 -

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

我完全无法想出如何完成这项任务。 我可以获取用户的日期时间值,然后使用在该日期时间之前 60 分钟调用的 函数 的逻辑。该函数包含我的“警报消息”。 但要如何完成呢?

有人可以给我一些提示吗?

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

先行致谢。

点赞
用户2303714
用户2303714

我会采取这样的方法:

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() 它,它的回调函数会 tick() 其他计时器... 无论如何,将每个计时器的回调设置为显示警报。

2013-05-08 12:53:10