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

几罗星人 2013-02-05 11:44:59
例如有一个循环要循环1000000次,中间需要耗时几分钟,在这几分钟里正常来说就会处于无响应的状态,也就是说如果用户尝试移动界面,单击,或者其他操作,程序都将没有反应。用户可能因为这样而判断程序卡住而直接结束进程。有没有什么办法能够让程序不至于进入无响应的状态?至少让用户觉得程序还是有反应的~
...全文
1208 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个方法:传统的:消息陷阱;更合理的,把长时间运算放到独立的子线程中去。
随着通信电子技术的迅速发展,信息技术给家居行业产生了深远的影响,家居环境的智能化监控已经成为智能家居的一个重要的发展方向。人们逐渐对自己的生活提出一种更高的要求,他们需要一种智能化、可交互,并且融合现代创新科技的产品来改善他们的生活环境,使他们生活更加安全、舒适、便捷、智能。本文根据智能家居的发展背景和研究现状,并且从实用性和可行性角度出发,研究设计了一种基于STM32单片机的智能家居系统。该系统由一个多功能综合的技术系统组成,各个多功能子系统间具有协同配合能力。基于STM32单片机实现的功能子系统包括:智能温度检测,智能湿度检测,智能烟雾/火灾检测智能检测,无线传输,人机交互机构,风扇调节,报警模块。 整个系统分为前端51单片机采集板和后端STM32单片机接收板。 采集板使用DHT11温湿度传感器、MQ烟雾传感器完成室内家居环境的采集。然后通过nRFL24L01将采集到的数据发送给后端。接收板使用LCD1602完成数据显示、使用蜂鸣器模块报警,使用风扇驱动模块调节室内家居环境。本文完成了智能家居控制系统前端、后端软硬件的设计,使用Altium designer绘制了电路原理图,使用Keil C完成了51单片机和STM32单片机的编程与调试。 最后,对本文设计的基于STM32的智能家居控制系统进行部署调试。试验结果表明,该系统可成功应用在智能家居环境检测调节和火灾安全防护的领域,可提高家居生活智能化水平。

65,210

社区成员

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

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