打印

定时器问题

[复制链接]
934|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dfsa|  楼主 | 2013-10-30 16:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在View类的OnCreate中加入一个定时器SetTimer(0,100,NULL),然后再View类的OnTimer函数中写入如下代码:
         for(int i=0;i<500;i++)
           for(int j=0;j<400;j++)
  {
     if(((i-100)*(i-100)+(j-120)*(j-120))<100*100)
       data[i][j]-=1;
  }
CMainFrame *pMainFrm=(CMainFrame *)AfxGetMainWnd();
CMDIChildWnd *pChild = pMainFrm->MDIGetActive();
CLAIBINView *pView=(CLAIBINView*)pChild->GetActiveView();
if(maploadok)
pView->mapopen((data[i][j]));
其中数组data[i][j]的值表示不同直线的长度,if语句是用来判断一个圆形区域,以data[100][120]为圆心,半径为100的圆面。data[i][j]-=1相当于使整个圆面减少同样的高度1,这不是我想要的效果。我希望是圆心那点的值减少最多,随着逐渐向外扩展减少的值逐渐变小,相当于一个漏斗的样子。我需要怎样对data[i][j]操作才达到上述效果,并且用一个定时器使之以动态的过程形成类似于漏斗状。

相关帖子

沙发
sinadz| | 2013-10-30 16:45 | 只看该作者
多线程吧!

使用特权

评论回复
板凳
秋天落叶| | 2013-10-30 16:55 | 只看该作者
可以用大圆减逐步扩大的圆面积为计量

使用特权

评论回复
地板
pkat| | 2013-10-30 17:04 | 只看该作者
长时间的计算,开定时器一定会阻塞的。
应该启动线程计算。
如果需要在定时器里启动线程也行。

不过如果计算时间很长,无论怎么处理,任务都会积累下去。
最好根据需要计算,有些不必计算的就节省了。

比如你这里,如果是定时器开线程计算时,上次开的线程,还在计算,新线程就不必开了。
否则开线程计算,计算结束,结果通过消息,post 到主窗体显示。

如果,结果不是必须得到的,而时间非常重要,可以先结束前一个线程;
重新在新的时间点开线程计算。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

282

主题

2404

帖子

2

粉丝