Events 检测窗口关闭OCaml图形

Events 检测窗口关闭OCaml图形,events,window,ocaml,Events,Window,Ocaml,我在图形文档中没有找到有关窗口关闭检测的详细信息。如何检测它,以便在关闭时触发操作 谢谢。使用一个简单的测试程序(包括在本答案末尾)并手动关闭窗口,告诉我们出现了以下异常: Fatal error: exception Graphics.Graphic_failure("fatal I/O error") 这意味着我们可以使用异常处理程序来处理正在关闭的窗口: try (* Here goes the code opening and manipulating the window *)

我在图形文档中没有找到有关窗口关闭检测的详细信息。如何检测它,以便在关闭时触发操作


谢谢。

使用一个简单的测试程序(包括在本答案末尾)并手动关闭窗口,告诉我们出现了以下异常:

Fatal error: exception Graphics.Graphic_failure("fatal I/O error")
这意味着我们可以使用异常处理程序来处理正在关闭的窗口:

try
  (* Here goes the code opening and manipulating the window *)
with
  | Graphic_failure("fatal I/O error") ->
  (* Here goes the code handling the window being closed manually*)
测试程序(您需要运行
ocamlc graphics.cma Test.ml-o Test来编译它):


对我来说,它引发了图形故障(“Xlib错误:BadDrawable(无效的Pixmap或窗口参数)”)
。。。我的应用程序也有一些图形,但是终端控制的,有点像解释器,所以我没有事件循环。我仍然有一个命令循环,所以我可以在命令发送后捕获异常。。。因此,一个临时解决方案是匹配
Graphic\u故障(“致命I/O错误”)
Graphic\u故障(“Xlib错误:BadDrawable(无效的Pixmap或窗口参数)”)
,但我怎么知道我不应该捕获其他异常呢?即使我尝试在main中捕获这些异常,也会导致致命错误。对于上面的
Graphic\u故障
,我用
try match
包围了启动命令(文本和图形命令)的代码,它没有任何帮助。我也尝试过匹配
图形\u故障
,但仍然没有帮助。。。
open Graphics

let rec loop () = loop ()
let () =
(*
  try
*)
    Graphics.open_graph " 400x600";
    loop ()
(*
  with
    | Graphic_failure("fatal I/O error") ->
      print_string "Caught exception";
      print_newline ()
*)