Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
如何使用 Lwt 编写程序并与 Tk 接口交互。我试图在 Lwt 抢占线程中运行 Tk 主线程
let () = Lwt.async(Lwt_preemptive.detach Tkthread.thread_main); Lwt_main.run(main Tkthread.top)
wheremain构造接口并运行一个线程来更新它。这最终导致程序崩溃并出现致命错误(无法创建小部件),然后是核心转储。
main
一起使用 Lwt 和 Labltk 的正确方法是什么?
我从未尝试将 LablTk 与 Lwt 一起使用,但tkThread.mli明确表示:
tkThread.mli
Windows 需要作业,因为您不能从另一个线程执行 GUI 工作。这在 OSX/Aqua 上显然也是如此。即使使用 X11,一些调用也需要来自主线程。基本思想是使用异步(如果您不需要结果)或在您从另一个线程(例如使用线程顶层)调用与 Tk 相关的函数时同步。使用同步,当心死锁!
因此,我建议将您对 LablTk 的调用用TkThread.sync.
TkThread.sync
您还应该在 caml-list 上提问。可能那里有人以前尝试过。