Perbarui hanya Client Rectangle

pemrograman


Halo,

Saya telah mengerjakan aplikasi MFC multi-utas yang perlu memplot grafik pada kontrol gambar. Segalanya tampak

berfungsi dengan baik terlepas dari kenyataan bahwa kontrol gambar tidak menggambar ulang saat memanggil fungsi Invalidate untuk gambar tersebut

kontrol. Seluruh jendela digambar ulang dan terjadi kedipan jika saya memanggil Invalidate pada dialog. Ada saran di mana saya

aku salah? Saya sudah mencoba ini tetapi tidak membantu: http://computer-programming-forum.com/82-mfc/1d8b6d604dd7c393.htm

Kode:

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);
}
}

Solusi 1

Saya pikir masalahnya adalah akses GUI dari thread pekerja. Lihatlah artikel ini untuk mengetahui cara melakukannya dengan benar: Menggunakan Thread Pekerja[^]

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.

Solusi 3

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

コメント

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