如何在OCaml中安排任务?

时间:2013-06-13 15:31:33

标签: ocaml

我需要每4小时或每天进行一次任务。

在Java中,它有quartzspringtimer

但是在OCaml中,我该怎么做?对此有什么好处?

1 个答案:

答案 0 :(得分:5)

我不知道有任何库可以做到这一点,但我认为你可以使用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函数在异步轻量级线程中调用给定的函数(here,hello),因此您可以在程序中自由地执行其他操作。只要您的程序没有退出,“Hello world”将每4小时打印一次。

如果你想能够阻止它,你也可以像这样启动线程而不是Lwt.async:

let a = hello ()

然后,停止线程:

Lwt.cancel a

请注意Lwt.cancel会抛出“Lwt.canceled”异常!

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