2012-02-14 13 views
0

ここではMFCは一般的なテーマではありませんが、私はプラットフォームのアドバイスを探しています。MFCでビューのスレッドを作成する方法はありますか?

多くの場合、onIdleを使用しているマルチスレッドのMFCアプリケーションがあり、私たちの場合はプロット機能PGLをアプリケーションに追加したいと考えています。もちろん、それが追加されると、プロットは主にオンデッドのためにちらつきます。

私はプロットの観点からスレッドを持つことを考えています。しかし、どのように進むかは分かりません。私はいくつかのメッセージを受け取る必要があるので、私はこれのためにUIスレッドを持つ必要があると信じています。私は何かアドバイスをいただければ幸いです。

答えて

2

あなたはここに混ざって物事のカップルを持っているかもしれません:グラフィックスのための別のスレッドを使用して

  1. は(それはあなたの説明から伝えるのは難しいです)良いアイデアかもしれませんが、うまくなくてもよいです。プロット関数の結果としてUIが応答しなくなったり低速になったりしない限り、何のメリットもありません。

  2. 問題がちらついている場合、これは全く異なる問題です。プロットをダブルバッファリングすることで最もよく解決されます。 - 描画をメモリデバイスコンテキストに行い、終了したらそのデータをコピーします更新されたセクション)を画面に表示します。

+0

私が言ったように、点滅はAppクラスのOnIdleルーチンによるものです。 Stlllはビュー描画のスレッドが不要だと思いますか? –

+0

あなたがここに入れたことと他の答えに応じて、私は別のスレッドは不要で、必ずしもちらつきの問題を解決することなく複雑さを増すと思います。実際には、ちらつきの原因となるUpdateAllViewsはありません。ちらつきの原因となるビューの描画コードです。それは微妙な違いですが、重要な違いです。ビューを二重にバッファリングすると、それらを更新する頻度に関わらず決してちらつくことはありません。 – Redeye

+0

+1はスレッドが必要でないことを指摘します。あなたが正しいです。 –

1

すべてのものをオンデリートから取り出します。 onIdle = 'UIメッセージの処理を停止する'の項目。そこには何か?

+0

OnIdleは、id 1のメッセージのみを処理します。実行は長いです。 OnIdle()は、メッセージキューが空の場合にのみ実行されます。 –

+0

あなたの答えをありがとう。私はこのリアルタイムアプリケーションが必要なことを行うので、OnIdleからのものを取り除くことはできません。しかし、UpdateIllViewsがOnIdleで呼び出されていることが判明し、それがちらつきの原因です。 –

0

MTMDIサンプルがユーザ インターフェースイベントがメイン アプリケーションスレッドから別のスレッドで処理されたMFCユーザーインターフェイススレッドを示します。このサンプルは、 シングルスレッドMDIサンプルの修正版です。

関連する問題