我在OCaml中编写了一些代码,它们执行类似于以下的操作
let rec main() =
DO STUFF...
let print_time() =
let time = Unix.localtime (Unix.time()) in
let hour = string_of_int (time.Unix.tm_hour) in
let minute = string_of_int (time.Unix.tim_min) in
print_string ("\n Time -- " ^ hour ^ ":" ^ minute)
in
Lwt.bind(Lwt_unix.sleep 30.)
(fun() -> (print_time(); main();)
;;
main();;
此代码在顶层运行完美,但似乎时间正在打印到缓冲区而不是立即打印到屏幕上。当我给出另一个命令时,缓冲区中的所有时间都会立即打印到屏幕上。
如何更正此问题,以便每次调用print_time()
时将时间打印到顶层,而不是在我给出顶级命令时?
示例:如果我运行程序然后等待2分钟才能在顶部输入内容,我会得到以下输出。如果我没有在顶层输入任何内容,那么我只收到第一次消息。
# #use "this_program";;
Time -- 12:03
# let x = 1;;
time -- 12:03
time -- 12:04
time -- 12:04
time -- 12:05
time -- 12:05
val x : int = 1
#
此外,这个“循环”只能在本机编译代码中运行一次(main()
不会递归调用自身),我不知道如何纠正它。
答案 0 :(得分:1)
我会在您致电flush stdout
后尝试添加print_string
。