为什么在使用MFC编程时,MFC内部自动维护了一个消息循环,为什么有些程序还要再自己定义一个消息循环?
void CMediaTimerDlg::OnStart()
{
// TODO: Add your control notification handler code here
MSG message;
k=0;//初始化为零
count=0;//初始化为零
nMaxCount=10000;//初始化为10000
StartOneMilliSecondTimer();//触发定时器
volatile int nTemp;//设置临时变量
for (m_nCount=0;m_nCount<nMaxCount;m_nCount++)
{
for (nTemp=0;nTemp<5000;nTemp++)
{ /*运行CPU*/}
if (::PeekMessage(&message,NULL,0,0,PM_NOREMOVE))//中断时间交出控制权
{
::TranslateMessage(&message);
::DispatchMessage(&message); count=m_nCount*5000;//计算出当前循环次数
}
}
timeKillEvent(TimerID_1ms);//测试结束得删除定时器
timeEndPeriod(wAccuracy);//测试结束得删除分辨率
AfxMessageBox("测试结束");
}
void CMediaTimerDlg::OnStart()
{
// TODO: Add your control notification handler code here
MSG message;
k=0;//初始化为零
count=0;//初始化为零
nMaxCount=10000;//初始化为10000
StartOneMilliSecondTimer();//触发定时器
volatile int nTemp;//设置临时变量
for (m_nCount=0;m_nCount<nMaxCount;m_nCount++)
{
for (nTemp=0;nTemp<5000;nTemp++)
{ /*运行CPU*/}
if (::PeekMessage(&message,NULL,0,0,PM_NOREMOVE))//中断时间交出控制权
{
::TranslateMessage(&message);
::DispatchMessage(&message); count=m_nCount*5000;//计算出当前循环次数
}
}
timeKillEvent(TimerID_1ms);//测试结束得删除定时器
timeEndPeriod(wAccuracy);//测试结束得删除分辨率
AfxMessageBox("测试结束");
}
解决方案 »
- 缓存里面可以放入3600*2000个float数据吗?
- 怎样生成控件类?
- MSDN中列举进程代码无法运行出结果问题
- 大侠,请问vc如何读取window当前登录的域用户,及怎样进行域用户身份验证? 急急急
- 文本文件的内容导入Sql Server.算法。
- 如何初始化一个FormView类的界面?
- 联接基本成功(有一处warning),既然不能生成exe文件,怎么回事?!!
- 想得到其他窗口,用ClientToScreen(&point),和CWnd::WindowFromPoint,但得不到,总得到程序本身的窗口,请问是否需要用钩子?请帮忙分
- 希望认识专业的软件界面开发人员
- IE11的滚动条风格怎么模仿?
- VC +SQL超市管理系统 毕业设计(开题报告,文献综述,文献翻译,源文件)
- 如何换行,将数据库里的数据输出到窗口,。。。。
消息才是自定义的。一般这个自定义的消息就是重载的目的。
举个简单的例子来说明它的用途
比如要很长段时间做某件事情,我们一般会用线程以免卡死程序,
然而偶尔又要操作界面,我们就可以自定义一个消息,重载消息循环来接收。
于是在线程里POST这个消息。
void CMediaTimerDlg::OnStart()
{
// TODO: Add your control notification handler code here
MSG message;
count=0;//初始化为零
nMaxCount=1000000;//初始化为10000
volatile int nTemp;//设置临时变量
for (m_nCount=0;m_nCount <nMaxCount;m_nCount++)
{
for (nTemp=0;nTemp <500000;nTemp++)
{ /*运行CPU*/ }
if (::PeekMessage(&message,NULL,0,0,PM_NOREMOVE))//中断时间交出控制权
{
::TranslateMessage(&message);
::DispatchMessage(&message); count=m_nCount*5000;//计算出当前循环次数
}
}
AfxMessageBox("测试结束"); }
上面这程序照样“假死机”啊????????????
好象也避免不了,好象要用多线程才能防止“假死机”啊???哪位高手再帮帮忙啊??????????????????????????
这一点还是没明白