百科问答小站 logo
百科问答小站 font logo



while(true);为什么有些语言会卡死 有些不会? ? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

只接触过VB、C,题主问的是界面卡死,我就说说卡死的原因:

Windows采用消息机制,每个窗体有一个消息线程,用于响应用户事件(鼠标、键盘等),也就是一个消息队列。

对于VB来说,是面向事件编程的,在一个事件里使用While True相当于把消息线程阻塞了,后面的消息一直卡在消息队列里,卡到一定程度,就界面就停止响应了。

同样的,用C也可以卡死界面,道理是一样的,消息队列满了。

VB里有一个技巧,就是在while true里插入一行doevents,相当于释放一下CPU让消息线程继续跑一跑,这样就不会卡死了。

这个技巧在C#里是Application.DoEvents(),用C实现应该是类似DispatchMessage之类的(很久没写了记不太清楚)。

Java和AS不了解原理,不好判断,但如果Java的事件处理如果不是单线程的,那么其中一个卡死则不会影响其余消息的处理。

这里还有一个技巧,有些病毒或者恶意软件会卡死整个系统,方法就是在系统层面上挂消息钩子,钩子里多做点事情就足够卡死整个系统了。




  

相关话题

  为什么有人坚信人类不可能基于 GUI 的操作方式,发明出比「命令式编辑器」效率更高的开发环境? 
  C 语言float和double哪个算得快? 
  信息学竞赛算是边缘竞赛吗? 
  如何评价Jexus V5.8.0 发布被人砸场? 
  不同编程语言的程序员之间有鄙视链么? 
  Stack Overflow 2016 年度报告中有哪些有趣的事实? 
  大一计算机专业怎么利用好寒假? 
  Windows 上最小的「HelloWorld.exe」能有多小? 
  不准备深入学习编程前提下,能最快上手制作 win 端简单软件的语言是什么? 
  作为一个程序员,你的桌子上都有些什么? 

前一个讨论
计算机执行一条指令要多长时间?
下一个讨论
为什么中国办得出北京奥运会水准的奥运会,却办不出东京马拉松水准的马拉松?





© 2024-12-26 - tinynew.org. All Rights Reserved.
© 2024-12-26 - tinynew.org. 保留所有权利