私のC++プロジェクトでFLTKを実行しようとしています。私はOMNeT ++シミュレーションを作成しています。エミュレートされたホストのようなGUIを使用したいと思っています。つまり、送信ボタンを作ることができ、GUIに接続されたホストはシミュレーションで送信するメッセージを待ち行列に入れます。FLTKとC++ 11スレッドで「Tcl_ServiceModeHook:Notifier not initialized」エラーが発生しました
私が抱えている問題は、FLTKウィンドウが実行されるとウィンドウを閉じるまでシミュレーション全体がフリーズするのを待つことです。私の解決策はGUIを別のスレッドで実行することでした。しかし、今私はこのエラーが表示されます:
Tcl_ServiceModeHook: Notifier not initialized
以下は、スレッドとGUIを含むクラスのコードです。
#include <Enumerations.H>
#include <Fl.H>
#include <Fl_Box.H>
#include <Fl_Widget.H>
#include <Fl_Window.H>
#include <GUI.h>
void GUI::callThread() {
t = std::thread(&GUI::openWindow, this);
}
int GUI::openWindow() {
Fl_Window *window = new Fl_Window(300,180);
Fl_Box *box = new Fl_Box(20,40,260,100,"Hello, World!");
box->box(FL_UP_BOX);
box->labelsize(36);
box->labelfont(FL_BOLD+FL_ITALIC);
box->labeltype(FL_SHADOW_LABEL);
window->end();
window->show();
return Fl::run();
}
私はそれを呼び出すために行うすべては、次のとおりです。
GUI *g = new GUI();
g->callThread();
私だけではなく直接)(openWindowを呼び出すと、ウィンドウが細かい開きますが、シミュレーションの残りの部分ではないので、それがアクションを待ち続けることができます。
私はこのクロスプラットフォーム(MacとWindowsで動作する必要があります)を作ろうとしています。私はFLTKが次善策のように思えるようにQt(設定が複雑すぎる)とwxWidgets(コンピュータ上でエラーを作る)を試みました。
このエラーを修正する方法を知っている人や、GUIを設定するためのより良い方法について意見があれば、私はすべて耳にします。これは私ができる唯一のもののように思えました。
私はC++のGUIプログラミングに慣れていませんが、 toを実行することは、シミュレーション時間と実行時間が関連していないという事実を扱うことです。基本的には、OMNeT ++コードとは独立した方法でGUIスレッドを開始する必要があることを意味します。これは、プログラミングモデルが実際には予期しないものです。あなたの目標が正確であるかどうかにもよりますが、一貫性に問題があるかもしれません(シミュレーション時間がユーザーの見ているものよりも100倍遅い場合、約100倍速くなります)。 –
C++からそうしようとしているようですTclはここにどのように関わっていますか? –
OpenWindowは静的として宣言されていますか? – cup