2011-03-18 24 views
0

私はform.hファイルでGUIを設計するためにC++ managed 2010を使用しています。 GUIは、スレーブカードからデータストリーミングをマスターするマスターとして機能します。デバッグを開始せずにデバッグを開始せずにプロジェクトを実行する方法は?

ボタンを押すと、API win32(CREATETHREAD(...))を使用して2つのスレッドが作成されます(前者はデータストリーミングを処理するためのもので、後者はGUI上のリアルタイムgrpah上のデータ解析とデータ監視のためのものです。

プロジェクトには2つの異なる動作があります。デバッグモードで起動すると、GUIのコントロールをデータストーミング中にテキストボックス(invokeを使用)とグラフに更新できます。逆にデバッグなしで起動すると反対にテキストボックスにデータは表示されません。データはチャート上で非常にゆっくりと表示されます。

これまで誰もが同様の問題に対処していますか?何か提案してください。

答えて

0

かなり古典的な間違いは、Control :: Begin/Invoke()を頻繁に使用することです。。デリゲートの呼び出し要求をUIスレッドにあふれさせます。 UIアップデートは高価になる傾向があります。メッセージループが優先順位の低い任務に慣れることができない状態に簡単に入ることができます。絵のように。これは簡単に起きます。デリゲートターゲットがどれくらいの時間を費やしているかに応じて、毎秒1000回以上呼び出すことは危険ゾーンです。

これを解決するには、目を見分ける能力を利用する現実的なレートでアップデートを送信します。毎秒25回、更新がぼかしに変わり、それを速く更新するのは単なるCPUサイクルの無駄です。これは、UIスレッドが何をする必要があるのか​​に多くの時間を費やします。

アップデートが高価な場合でも、これはまだ十分に遅くない場合があります。どの時点で更新をスキップするか、ワーカースレッドを絞る必要があります。 Invoke()は自動的に抑制され、BeginInvoke()は自動的に抑制されます。

関連する問題