我的MFC程序中,有一个函数调用频率非常高,基本上一秒钟就会调用一次,而这个函数主要是对grid的内容进行更新。我想应该和mfc的消息机制有关,但是我看了很多资料,也想不出来个所以然来,所以特来请教各位GG\MM,帮帮忙吧

解决方案 »

  1.   

    参数放到一个结构中不就可以了吗??将结构体的指针传递给新线程。
    或者,用消息泵试试。来自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;
    }每次调用你的频繁函数之前,调用这个函数试试。
      

  2.   

    xiaoqiqixiao(七七) :我的问题其实很简单,大凡mfc用到半精不精的时候就会遇到我这样的问题。诶,其实我也只是想省事,还有就是我觉得为什么一个线程不停的选环操作不影响界面,虽然它也操作界面控件,而用一个dialog类函数反而做不到这一点呢。这不是很奇怪吗?
      

  3.   

    enoloo(行者无疆):谢谢你,我正在研究,稍后告诉你结果
      

  4.   

    在此向楼主致以最诚挚的歉意:
    呵呵,没看到题目,所以都不知道你在问什么问题?
    你现在是怎么做的,在OnTimer中调用这个函数吗?
    如果OnTimer中不行的话,感觉上你也许应该检查一下你的这个函数,看看是不是能优化一下,不让这个函数执行时间太长
      

  5.   

    在这个函数中手动检查一下有无消息,有的话就分发:MSG message;
    if (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) 
    {
        ::TranslateMessage(&message);
        ::DispatchMessage(&message);
    }
      

  6.   

    xxiaoqiqixiao(七七) :我的问题其实很简单,大凡mfc用到半精不精的时候就会遇到我这样的问题。诶,其实我也只是想省事,还有就是我觉得为什么一个线程不停的选环操作不影响界面,虽然它也操作界面控件,而用一个dialog类函数反而做不到这一点呢。这不是很奇怪吗?
    我自己的想法请大家不要见笑:
    一个dialog类函数不断循环会造成程序无响应可能是因为它在主线程里面,它运行时主线程里面其他的代码运行就受影响,而放到另外的线程就不会影响到主线程里面其他代码的运行。
      

  7.   

    dialog类函数?
    什么?
    是不是用无模式的对话框?使用无模式对话框,主线程消息将被暂时阻塞,消息循环在对话框中,
    如果这时控制权交给了主线程而又赚不回来,当然会出现问题啦。像楼上说的就可以了,将循环交道子线程中去。
      

  8.   

    各位,不好意思,来晚了,这个csdn动不动就关闭bbs,受不了。我的问题已经解决,正如forswear(烂烂)所言,我还是使用了多线程的模式,谢谢各位!