1

如何使用 Lwt 编写程序并与 Tk 接口交互。我试图在 Lwt 抢占线程中运行 Tk 主线程

let () =
  Lwt.async(Lwt_preemptive.detach Tkthread.thread_main);
  Lwt_main.run(main Tkthread.top)

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

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

4

1 回答 1

1

我从未尝试将 LablTk 与 Lwt 一起使用,但tkThread.mli明确表示:

Windows 需要作业,因为您不能从另一个线程执行 GUI 工作。这在 OSX/Aqua 上显然也是如此。即使使用 X11,一些调用也需要来自主线程。基本思想是使用异步(如果您不需要结果)或在您从另一个线程(例如使用线程顶层)调用与 Tk 相关的函数时同步。使用同步,当心死锁!

因此,我建议将您对 LablTk 的调用用TkThread.sync.

您还应该在 caml-list 上提问。可能那里有人以前尝试过。

于 2015-10-08T02:26:12.953 回答