【解決方法】クライアント四角形のみを更新

[ad_1]

こんにちは、

私は、ピクチャ コントロールにグラフをプロットする必要があるマルチスレッド MFC アプリケーションに取り組んでいます。 すべてがそう見える

画像の Invalidate 関数を呼び出したときに画像コントロールが再描画されないという事実を除けば、正常に動作します。

コントロール。 ダイアログで Invalidate を呼び出すと、ウィンドウ全体が再描画され、ちらつきが発生します。 私がどこにいるかについての提案は

間違っていますか? これを試してみましたが、役に立ちませんでした: http://computer-programming-forum.com/82-mfc/1d8b6d604dd7c393.htm

コード:

C++
DWORD WINAPI CDlg::WorkerThread(LPVOID lpVoid)
{
CDlg* appPtr = (CDlg*)lpVoid;
CStatic* pStatic = (CStatic*)appPtr->GetDlgItem(IDC_GRAPH_WINDOW);

while(true)
{
// Plotting graph
// Requires Update
appPtr->UpdatePoints(i);
pStatic->PostMessage(WM_PAINT);
}
}

解決策 1

問題はワーカースレッドからのGUIへのアクセスだと思います。 正しい方法については、この記事をご覧ください。 ワーカースレッドの使用[^]

Worker threads and the GUI II: Don't touch the GUI

That's right. A worker thread must not touch a GUI object. This means that you should not query the state of a control, add something to a list box, set the state of a control, etc.

Why?

Because you can get into a serious deadlock situation. A classic example was posted on one of the discussion boards, and it described something that had happened to me last year. The situation is this: you start a thread, and then decide to wait for the thread to complete. Meanwhile, the thread does something apparently innocuous, such as add something to a list box, or, in the example that was posted, calls FindWindow. In both cases, the process came to a screeching halt, as all threads deadlocked.

解決策 3

http://www.hotboat.com/frm/member.php?u=12894

[ad_2]

コメント

タイトルとURLをコピーしました