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

Lwt で LablTk を使用しようとしたことはありませんが、次のようtkThread.mliに明確に述べています。

別のスレッドから GUI 作業を行うことはできないため、Windows にはジョブが必要です。これは明らかに OSX/Aqua にも当てはまります。また、X11 を使用していても、一部の呼び出しはメイン スレッドから行う必要があります。基本的な考え方は、非同期 (結果が必要ない場合) を使用するか、別のスレッドから Tk 関連の関数を呼び出すたびに (たとえば、スレッド化されたトップレベルで) 同期を使用することです。同期では、デッドロックに注意してください!

したがって、LablTk の呼び出しを でラップすることを提案しますTkThread.sync

また、caml-list で質問する必要があります。おそらく、誰かが以前にこれを試したことがあるでしょう。

于 2015-10-08T02:26:12.953 に答える