读书人

PeekMessage的使用,该如何处理

发布时间: 2012-01-11 22:28:46 作者: rapoo

PeekMessage的使用
程序中这样一段代码:
void CComputeDlg::OnTimer(UINT nIDEvent)
{
CProgressCtrl* pBar = (CProgressCtrl*) GetDlgItem(IDC_PROGRESS1);
pBar-> SetRange(0,500);
pBar-> SetPos(m_nCount * 100 / nMaxCount);


CDialog::OnTimer(nIDEvent);
}

void CComputeDlg::OnBnClickedStart()
{
MSG message;
m_nTimer = SetTimer(1, 100, NULL); // 1/10 second
ASSERT(m_nTimer != 0);
GetDlgItem(IDC_START)-> EnableWindow(FALSE);
volatile int nTemp;
for (m_nCount = 0; m_nCount < nMaxCount; m_nCount++) {
for (nTemp = 0; nTemp < 10000; nTemp++) {
// uses up CPU cycles
}
if (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) {
::TranslateMessage(&message);


::DispatchMessage(&message);
}
}
GetDlgItem(IDC_START)-> EnableWindow(TRUE);
CDialog::OnOK();
}
这个地方PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) 到底是干嘛用的啊?如果没有它会有什么后果?

[解决办法]
我知道的用一种用法,就是利用windows的消息机制来做某些事情,你那里的PeekMessage是在主线程里,好像意义不大``不过如果你的PeekMessage{...}是放在另一个线程里,那么发送给那个线程的消息,都会经过peekmessage来转发``
我这边项目就用一个看不见的窗口,用来处理某些消息,例如MediaEventWnd,是一个窗口,看不见的,这个窗口在一个线程中注册创建,然后就开始消息循环,别的线程通过发送Play或Pasue等消息来控制视频。

读书人网 >VC/MFC

热点推荐