遇到需要次数很多的循环的时候,怎么能让程序不会卡死?
例如有一个循环要循环1000000次,中间需要耗时几分钟,在这几分钟里正常来说就会处于无响应的状态,也就是说如果用户尝试移动界面,单击,或者其他操作,程序都将没有反应。用户可能因为这样而判断程序卡住而直接结束进程。有没有什么办法能够让程序不至于进入无响应的状态?至少让用户觉得程序还是有反应的~
[解决办法]
有2个方法:传统的:消息陷阱;更合理的,把长时间运算放到独立的子线程中去。
[解决办法]
用一个单独线程监控这个线程状态不就可以了么
[解决办法]
UI层是异步事件触发的,所以同步逻辑必须挪到独立的线程里执行。
而线程池可以减少线程创建销毁的开销,所以做一个通用的线程池,以及 一个异步层与同步层交互的逻辑与框架设计 是很必要的。
这是很基础的认知,没有什么奇淫巧计。
[解决办法]
每循环比如1000次调用消息处理:
if (i%1000==0) {
MSG msg;
if (GetMessage(&msg,NULL,0,0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}