-1

私は現在、音響信号ビジュアライザーに取り組んでいます。信号を取得したら、その波形とスペクトルの両方を 2 つの異なるウィンドウにプロットする必要があります。したがって、Plotter クラスを実装しました。これは、構築時にインスタンスごとに独自のスレッドを作成します。しかし、FLTK の機能の多くは、一部のクラス メソッド呼び出しでクラッシュするため、スレッドセーフではないように思われるため、問題が発生しています。(設定軸スケールなど)

私が今使っているモデル:

Plotter 1 -> ctor() -> create thread
                                     \
Plotter 2 -> ctor() -> create thread----> PlotterThread(Plotter*this) - 
                                     /                                |
Plotter 3 -> ctor() -> create thread                                  |
                                                                      |
                                                     create fltk window and init object 

このモデルは実用的ですか?今はわかりません...ありがとう。

4

2 に答える 2

1

並行プログラミングに関する FLTK ドキュメントの最も重要な部分を読んでいないことは明らかです: http://www.fltk.org/doc-1.3/advanced.html#advanced_multithreading。よくお読みください。

2 つの選択肢があります。

  1. Fl::awake()メイン (gui) スレッドにメッセージを送信するために使用します。メインスレッドは、使用してメッセージを確認し、Fl::thread_message()好きなウィジェットを作成できます。

  2. FLTK メソッドの呼び出しFl::lock()と呼び出しの間。Fl::unlock()

最後に、$FLTK_SRC/test ディレクトリに非常に優れたデモがあります。$FLTK_SRC は、FLTK ソース ツリーを保持するディレクトリです。お持ちでない方はダウンロードしてください。

于 2013-10-02T13:20:13.607 に答える