Re: Saturating message queue?
"L.Allan" <l.allan@worldnet.att.net> wrote in message
news:O16osUsTIHA.6060@TK2MSFTNGP05.phx.gbl...
I was interested in timing how long it took for a parent and child thread
to exchange a series of window messages. I thought I would start with the
Frame and View in the main thread of a doc/view sdi app for simplicity.
I set up a menu item to initiate a loop. Then the Frame and View exchange
a token until the token is incremented to a certain value. However, it
hangs if I use a token value of more than 20. Am I doing something wrong?
Is "SendMessageToDescendants" an inappropriate choice? Is the message
queue "saturating"? ... which would seem odd since the app is using
"SendMessage" rather than "PostMessage"?
// MainFrame handles menu command to initiate
void CBbMainFrame::OnTimeMessaging()
{
SendMessageToDescendants(UWM_BB_FRAME_TO_VIEW, 1, 0);
}
// View handles message and checks token value
// 20 or less is ok, hangs with 21
LRESULT CBbView::OnBbFrameToView(WPARAM token, LPARAM)
{
TRACE1("View:FrameToView %d\n", token);
if (token == 1) {
HiResTimerStart(); // Uses QueryPerformanceCounter
}
if (token < 20) {
m_pFrame->SendMessage(UWM_BB_VIEW_TO_FRAME, token, 0);
}
else {
double elapsed = HiResTimerElapsedMillis();
CString csMsg;
csMsg.Format("20 loops Token: %d elapsed: %.3f\n", token, elapsed);
AfxMessageBox(csMsg);
}
return 0;
}
// Frame handles message, increments token, and sends another message
LRESULT CBbMainFrame::OnBbViewToFrame(WPARAM token, LPARAM)
{
TRACE1("Frame:ViewToFrame Token: %d\n", token);
SendMessageToDescendants(UWM_BB_FRAME_TO_VIEW, (token+1), 0);
return 0;
}
Try removing all IO like TRACE, that is probably what is taking up all the
time.
-- David