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

几罗星人 2013-02-05 11:44:59
例如有一个循环要循环1000000次,中间需要耗时几分钟,在这几分钟里正常来说就会处于无响应的状态,也就是说如果用户尝试移动界面,单击,或者其他操作,程序都将没有反应。用户可能因为这样而判断程序卡住而直接结束进程。有没有什么办法能够让程序不至于进入无响应的状态?至少让用户觉得程序还是有反应的~
...全文
909 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
几罗星人 2013-02-16
  • 打赏
  • 举报
回复
引用 8 楼 qq120848369 的回复:
UI层是异步事件触发的,所以同步逻辑必须挪到独立的线程里执行。 而线程池可以减少线程创建销毁的开销,所以做一个通用的线程池,以及 一个异步层与同步层交互的逻辑与框架设计 是很必要的。 这是很基础的认知,没有什么奇淫巧计。
嗯,最多人提出的是多线程,那么我就去研究一下他~~谢谢各位了
tianzhi0549 2013-02-10
  • 打赏
  • 举报
回复
楼主使用的要是vb的话,有一个很简单的方法,就是在循环语句之间加入doevents这句。 要是使用c/c++的话,我知道的好像只有使用多线程了。 楼主可以使用CreateThread()(有人建议使用beginthread())这个api再创建一个线程。
stmal 2013-02-09
  • 打赏
  • 举报
回复
如果是Delphi 的话,我会在循环中使用sleep(2)
阿麦 2013-02-07
  • 打赏
  • 举报
回复
不要在UI线程里做长时间的运算。 把运算整到其他线程去做,保持UI线程可以处理它自己的事。
caoh110 2013-02-07
  • 打赏
  • 举报
回复
可以在循环之间打印出一段信息,表示程序正在执行,在循环结束后打印一段信息表示循环结束。 或者也可以用个进度条。 其实方法很多的
sjjwan 2013-02-07
  • 打赏
  • 举报
回复
引用 10 楼 zhao4zhong1 的回复:
每循环比如1000次调用消息处理: C/C++ code ? 12345678 if (i%1000==0) { MSG msg; if (GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); ……
这个是解决问题的根本,关键你要理解为什么你的程序会卡住了。无非就是消息队列中的消息来不及处理啊。
March0912 2013-02-06
  • 打赏
  • 举报
回复
界面上搞个进度条不就行了
凨行者 2013-02-06
  • 打赏
  • 举报
回复
多线程应该可以吧
Qyee16 2013-02-06
  • 打赏
  • 举报
回复
显然多线程。。。 就是多线程。。。。。。。
zilaishuichina 2013-02-06
  • 打赏
  • 举报
回复
显然多线程。。。
风行踩火轮 2013-02-06
  • 打赏
  • 举报
回复
用一个单独线程监控这个线程状态不就可以了么
majia2011 2013-02-06
  • 打赏
  • 举报
回复
起个 线程
chanhit 2013-02-06
  • 打赏
  • 举报
回复
1) 可以起一个线程做那个大循环 2) 是不是算法有问题要做这么长时间的处理?
icerlion 2013-02-06
  • 打赏
  • 举报
回复
启动一个线程,在线程里面完成循环。 UI界面线程监视你启动的线程是否已经完成。
赵4老师 2013-02-06
  • 打赏
  • 举报
回复
每循环比如1000次调用消息处理:

if (i%1000==0) {
    MSG msg;
    if (GetMessage(&msg,NULL,0,0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}
  • 打赏
  • 举报
回复
sleep...让cpu主动让出时间片
qq120848369 2013-02-06
  • 打赏
  • 举报
回复
UI层是异步事件触发的,所以同步逻辑必须挪到独立的线程里执行。 而线程池可以减少线程创建销毁的开销,所以做一个通用的线程池,以及 一个异步层与同步层交互的逻辑与框架设计 是很必要的。 这是很基础的认知,没有什么奇淫巧计。
taodm 2013-02-05
  • 打赏
  • 举报
回复
有2个方法:传统的:消息陷阱;更合理的,把长时间运算放到独立的子线程中去。
微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 微信小程序系统教程共有“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]——核心技术”、“微信小程序系统教程[阶段]客服消息+微信支付+九宝电商系统”。 “微信小程序系统教程[阶段]全套课程”包含: 1.微信小程序系统教程[阶段]_客服消息 2.微信小程序系统教程[阶段]_微信支付 3.微信小程序系统教程[阶段]_九宝电商系统 学习“微信小程序系统教程[阶段]”要求有微信小程序的基础。建议先学习“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]”,后在报名“微信小程序系统教程[阶段]”。 阶段讲解的客服消息,是针对小程序的。后台程序用接近底层的技术,没有使用三方技术。这样降低同学们学习成本。 微信支付,这部分课程很有难度,要求同学们认真听讲,有不会的技术问题可以请教老师。购买课程后请联系老师,提供单号,给你源程序。 九宝电商系统是一套十分适和学习、项目的课程。既可以系统的学习微信小程序相关知识,还可以修改后上线。 “微信小程序系统教程[中级阶段]——核心技术”重点讲解微信小程序事件、组件、API 微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 购买课程的同学,可赠送就九宝老师编写的《微信小程序开发宝典》。 购课请咨询qq2326321088

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧