Re: why UI gets hangs
Hi Aditya,
Yes. You should only have one UI thread and that thread should be left free
to process messages (I.E., don't ever block it). You can communicate to the
UI thread using SendMessage or PostMessage (I tend to use PostMessage) as
others have mentioned. It's a little confusing, but once you get it set up
I think you'll find it easy enough. I typically have a set routine called
setUIWnd(CWnd *pWnd) in my thread code and set the UI window with something
like:
void CMyThread::setUIWnd(CWnd *pWnd)
{
m_pUIWnd = pWnd;
}
m_MyThread.setUIWnd(AfxGetMainWnd()); // When called from GUI thread before
starting worker thread.
Then in the worker thread you can post messages to this window:
if(m_pUIWnd != null)
m_pUIWnd.PostMessage(WM_MYMESSAGE,...);
Then in your UI window handle the message with a typical handler:
ON_MESSAGE(WM_UPDATE_SERVER_STATE, OnServerStateChange)
LRESULT CMainFrame::OnServerStateChange(WPARAM wParam, LPARAM lParam)
{
// Do whatever
return 0L;
}
That way your worker thread can communicate (progress, states, whatever)
with your UI thread without blocking the UI thread. If you need to stop a
window from operating you can disable it as well using EnableWindow(false),
but that won't block the UI.
Tom
"Aditya" <adityaborah@gmail.com> wrote in message
news:a73195f9-433a-4911-be67-aa40008ece84@i7g2000prf.googlegroups.com...
in summary..all people try to keep the primary UI thred free to
process messages and thats why all major operation use to do in work
thread...but my question is what is the main reason of keeping UI
thread free