2011-08-03 16 views
0

以内に私は(フィボナッチ数を計算する)、実行時にそのテキストを設定したいCStaticなコントロールを持っているRedrawwindow実行中のスレッド

Class TXT:public CStatic 
{ 
    private: 
    CString m_str; 
    public: 
    SetText(const CString& str) 
    { 
     m_str=str; 
     RedrawWindow(); 
    } 
////other methods OnPaint etc 
} 
//someclass that contains 
{ 
////.... 
TXT m_res; 
///.... 

} 
UINT threadProc(LPVOID lp) 
{ 
    //computing Fibonacci 
    p->m_res.SetText("resultTXT"); 
} 

私の問題は、出力文字列の結果がお互いを上書きしています;新しい出力が来たら、テキストは消去されません。

この問題を解決するにはどうすればよいですか?

+0

ここに表示されている(引数無し)と正確に 'RedrawWindow'を呼び出していますか、実際にはいくつかの引数を渡していますか?省略してここに示すコードを省略しますか? – eran

+0

David Heffernan氏が挑戦しているようにスレッドには他の問題があるかもしれませんが、それについて不平を言っている問題がコントロールペイントに問題があるようです。 OnPaintまたはOnEraseBkgndメソッドを上書きしていますか?残りのコードを追加できますか? –

答えて

0

私の推測では、メインスレッド(GUIスレッド)でウィンドウを作成していますが、そのウィンドウでワーカースレッドから関数を呼び出していると思います。それは、ウィンドウがそれらが作成されたスレッドと親和性があるので、ルールに反するでしょう。

ウィンドウハンドルを使用するすべてのAPI呼び出しがメインスレッドから行われていることを確認します。 SendMessage()コールは正しいスレッドにマーシャリングされますが、パフォーマンス上の理由から、いずれの場合も、メインスレッドから送信するほうがよいことに注意してください。

関連する問題