2016-05-27 22 views
1

私はスレッドを使用する初心者です。私はC++のプログラムを開発して、wxwidgetsを使用して、ネットワークインターフェイス経由で受信したパケットの数を示しました。私がこれまで行ってきたことは、wxdialogにがあります。ボタンをクリックするとwxgridを含むwxframeが開きます。 wxgridには、インターフェイス名、パケット入力、パケット出力などの情報が含まれています。wxthreadを使用してC++でwxframeのコンテンツを更新する

私が必要とするのは、パケットを常に更新し、パケットをフィールドから更新することです。私は、パケットとパケットを計算する関数を持っています。だから私は、ユーザーがframeを閉じるまで関数を実行する必要があると思う。

wxthreadがこれを実行するために利用されることを希望します。しかし、どのようにして始めるか、スレッドからどのように関数を実行できるかについては全く知らない。誰か教えてもらえますか?ありがとうございます

+1

wxWidgetsのドキュメントを参照しようとしましたか?はっきりしないものがありますか? – Igor

+0

@Igor:私はやった...しかし、私は必要な方法でそれを実装する方法を理解していませんでした – Jackzz

答えて

2

ワーカースレッドはGUIオブジェクトに直接アクセスすることはできませんので、必要に応じてイベントハンドラを定義できるメインスレッドにイベントを投稿する必要があります。便利な基底クラスはwxThreadEventという便利なイベントです。

また、特にC++ 11を使用する場合は、CallAfter()を使用すると、メインスレッドコンテキストでコールバックを実行できます。これは、C++ 11ラムダでは特に便利です。なぜなら、別のイベントハンドラに展開することなく、すべてのコードを同じ場所に保持できるからです。

+0

私は申し訳ありません。しかし、簡単な例を与えることができます.. – Jackzz

+0

wxWidgets自体で配布されたスレッドサンプルは、 'wxThreadEvent'。 'CallAfter()'の例は、[それについてのブログ記事](http://wxwidgets.blogspot.com/2013/01/about-benefits-of-procrastination.html)にあります。目的はそこにある。 –

関連する問題