我的MFC程序中,有一个函数调用频率非常高,基本上一秒钟就会调用一次,而这个函数主要是对grid的内容进行更新。我想应该和mfc的消息机制有关,但是我看了很多资料,也想不出来个所以然来,所以特来请教各位GG\MM,帮帮忙吧
解决方案 »
- 我在LIST Control的各个项中,添加了一个图,我怎么设计一下,可以点击一下这个图,可以弹出一个对话框来?
- 电子签章 控件移动问题
- 谁用过gridctrl_demo225版本的,可以帮我几个问题?
- 我建立了一个基于CEditView的SDI工程,如果给CEditView赋值然后显示那?
- 谁人知道WINDOWS有多少message,格式是什么?
- access编的数据表里有ole对象格式的,在vc中找不到对应的变量支持
- 急 用DirectX怎样实现禁止截屏功能!
- 关于CFileDialog的问题!!!
- WinInet的问题
- 请推荐一个用于对话框中的多行多列可编辑表格控件!!
- Dll创建时的简单问题 在线等...
- 怎么做
或者,用消息泵试试。来自http://dev.csdn.net/develop/article/28/28396.shtm下面。BOOL C**Dlg::PeekAndPump()
{
MSG msg;
while(::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
{
if(!AfxGetApp()->PumpMessage())
{
::PostQuitMessage(0);
return false;
}
}
return true;
}每次调用你的频繁函数之前,调用这个函数试试。
呵呵,没看到题目,所以都不知道你在问什么问题?
你现在是怎么做的,在OnTimer中调用这个函数吗?
如果OnTimer中不行的话,感觉上你也许应该检查一下你的这个函数,看看是不是能优化一下,不让这个函数执行时间太长
if (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&message);
::DispatchMessage(&message);
}
我自己的想法请大家不要见笑:
一个dialog类函数不断循环会造成程序无响应可能是因为它在主线程里面,它运行时主线程里面其他的代码运行就受影响,而放到另外的线程就不会影响到主线程里面其他代码的运行。
什么?
是不是用无模式的对话框?使用无模式对话框,主线程消息将被暂时阻塞,消息循环在对话框中,
如果这时控制权交给了主线程而又赚不回来,当然会出现问题啦。像楼上说的就可以了,将循环交道子线程中去。