1

I have a task need to be done every 4 hours or once a day.

In Java, it has quartz or spring or timer.

But in OCaml, how do I do that? Any good lib for that?

4

1 回答 1

6

我不知道有任何库可以做到这一点,但我认为您可以使用Lwt library轻松实现这种行为。

小例子,每 4 小时打印一次 Hello world :

let rec hello () = 
    Lwt.bind (Lwt_unix.sleep 14400.) 
       (fun () -> print_endline "Hello, world !"; hello ())
Lwt.async (hello)

Lwt.async 函数在异步轻量级线程中调用给定的函数(这里,你好),因此您可以在程序中自由地做其他事情。只要您的程序不退出,“Hello world”就会每 4 小时打印一次。

如果您希望能够停止它,您也可以像这样启动线程而不是 Lwt.async :

let a = hello ()

然后,停止线程:

Lwt.cancel a

请注意 Lwt.cancel 会引发“Lwt.canceled”异常!

然后,为了能够在一天中的特定时间启动任务,我只能鼓励您使用Unix 模块中的函数,例如 localtime 和 mktime。

于 2013-06-13T16:09:52.950 回答