如何在Labltk中使用Lwt



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

在Lwt抢占线程中运行Tk主线程。
let () =
  Lwt.async(Lwt_preemptive.detach Tkthread.thread_main);
  Lwt_main.run(main Tkthread.top)

,其中main构造接口并运行一个线程更新它。这最终导致程序崩溃,并出现致命错误(无法创建小部件),之后是核心转储。

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

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

Windows需要作业,因为您无法从另一个线程。在OSX/Aqua上显然也是如此。即使使用X11,一些调用也需要来自主线程。基本思想是要么使用async(如果你不需要结果)或者在从另一个线程调用Tk相关函数时进行同步(例如线程顶层)。使用同步时,要小心死锁!

因此,我建议用TkThread.sync封装您的LablTk调用。

你也应该在caml-list上问这个问题。可能之前有人尝试过。

相关内容

  • 没有找到相关文章

最新更新