[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]
コメント