我不知道有任何库可以做到这一点,但是我认为您可以使用Lwt库轻松实现这种行为。
小例子,每4小时打印一次Hello world:
let rec hello () =
Lwt.bind (Lwt_unix.sleep 14400.)
(fun () -> print_endline "Hello, world !"; hello ())
Lwt.async (hello)
Run Code Online (Sandbox Code Playgroud)
Lwt.async函数在异步轻量级线程中调用给定的函数(在此,您好),因此您可以在程序中自由地做其他事情。只要您的程序没有退出,“ Hello world”将每4小时打印一次。
如果您希望能够停止它,也可以像这样启动线程而不是Lwt.async:
let a = hello ()
Run Code Online (Sandbox Code Playgroud)
然后,停止线程:
Lwt.cancel a
Run Code Online (Sandbox Code Playgroud)
请注意,Lwt.cancel会引发“ Lwt.canceled”异常!
然后,为了能够在一天的特定时间启动任务,我只能鼓励您使用Unix模块中的函数,例如localtime和mktime。