如何使用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上问这个问题。可能之前有人尝试过。