如何在Labltk中使用Lwt?

时间:2015-10-07 23:16:30

标签: ocaml tk ocaml-lwt

如何使用Lwt编写程序并与Tk接口交互。我尝试使用

在Lwt抢先线程中运行Tk主线程
// A simple decorator
@annotation
class MyClass { }

function annotation(target) {
   // Add a property on target
   target.annotated = true;
}

其中let () = Lwt.async(Lwt_preemptive.detach Tkthread.thread_main); Lwt_main.run(main Tkthread.top) 构造接口并运行更新它的线程。这最终导致编程崩溃,导致致命错误(无法创建小部件),之后是核心转储。

将Lwt和Labltk一起使用的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

我从未尝试过将LablTk与Lwt一起使用,但tkThread.mli清楚地说:

  

Windows需要作业,因为您无法从中进行GUI工作      另一个线程。这在OSX / Aqua上显然也是如此。      即使使用X11,一些调用也需要来自主线程。      基本思路是使用异步(如果你不需要结果)      或者从另一个线程调用Tk相关函数时同步      (例如使用螺纹顶部)。      使用同步,请注意死锁!

因此,我建议用TkThread.sync包裹您对LablTk的调用。

你也应该在caml-list上提问。可能有人曾经尝试过这个。