首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

遇到需要次数很多的循环的时候,如何能让程序不会卡死

2013-02-27 
遇到需要次数很多的循环的时候,怎么能让程序不会卡死?例如有一个循环要循环1000000次,中间需要耗时几分钟,

遇到需要次数很多的循环的时候,怎么能让程序不会卡死?
例如有一个循环要循环1000000次,中间需要耗时几分钟,在这几分钟里正常来说就会处于无响应的状态,也就是说如果用户尝试移动界面,单击,或者其他操作,程序都将没有反应。用户可能因为这样而判断程序卡住而直接结束进程。有没有什么办法能够让程序不至于进入无响应的状态?至少让用户觉得程序还是有反应的~
[解决办法]
有2个方法:传统的:消息陷阱;更合理的,把长时间运算放到独立的子线程中去。
[解决办法]
用一个单独线程监控这个线程状态不就可以了么
[解决办法]
UI层是异步事件触发的,所以同步逻辑必须挪到独立的线程里执行。

而线程池可以减少线程创建销毁的开销,所以做一个通用的线程池,以及 一个异步层与同步层交互的逻辑与框架设计 是很必要的。

这是很基础的认知,没有什么奇淫巧计。
[解决办法]
每循环比如1000次调用消息处理:


if (i%1000==0) {
    MSG msg;
    if (GetMessage(&msg,NULL,0,0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}

[解决办法]
不要在UI线程里做长时间的运算。
把运算整到其他线程去做,保持UI线程可以处理它自己的事。
[解决办法]
楼主使用的要是vb的话,有一个很简单的方法,就是在循环语句之间加入doevents这句。

要是使用c/c++的话,我知道的好像只有使用多线程了。

楼主可以使用CreateThread()(有人建议使用beginthread())这个api再创建一个线程。

热点排行