黑马程序员技术交流社区

标题: 命令行中的ctrl+c到底是什么意思 [打印本页]

作者: 李政    时间: 2013-7-24 18:59
标题: 命令行中的ctrl+c到底是什么意思
本帖最后由 李政 于 2013-7-26 09:49 编辑

命令行中的ctrl+c到底是什么意思
在第24课的第三节中,在客户端为什么要判断一次line==null
我觉得等于null的时候当然是已经结束了这个程序了,何必再去判断null呢

最后的疑问都在命令行中的Ctrl+c是什么意思了?


作者: yangqing    时间: 2013-7-24 19:30
ctrl+c 不就是停止当前运行代码?
作者: 你为谁归来    时间: 2013-7-24 19:36
终止当前所运行的代码。
作者: toShareBeauty    时间: 2013-7-24 20:00
call off 的意思,就是调用停止当前进程的系统 api
作者: 深圳在漂移    时间: 2013-7-24 20:13
停止当前所运行的代码
作者: 王磊    时间: 2013-7-24 21:08
本帖最后由 王磊 于 2013-7-24 21:13 编辑

通过打印语句的逐行验证的结果,有一些个人的理解。
Ctrl+C,是系统底层的一个关键字,通过键入它,可以结束当前运行的线程,并提供给当前线程一个null指令,这个null指令只能被本地线程(客户端识别),因为通过验证发现当键入Ctrl+C的时候,服务端接收到的是一个值为"null"的字符串,这样在服务端看这个字符串就不具备与客户端识别的一样的功能。服务端对于这个"null"只会当做字符串去处理。

而且通过验证发现,在客户端执行Ctrl+C的时候,服务端线程并不是马上停止,而是会继续执行以下几行代码,我也不知道这是什么原因,目前还在查相关资料。。。
所以这就可以解释为什么要在客户端执行一次判断line==null,因为判断它,是为了让客户端识别Ctrl+C发出的可识别指令,但是执行后会继续执行后续一些代码,这样就会执行到关流和关服务端的方法close(),这个方法才会给服务端发送一个服务端可识别的null指令。
而如果不加这条判断语句,虽然客户端资源也被关闭,但却不是通过关资源的方法关闭的,这样服务端没有得到确切的客户端关闭的指令,这样的话服务端还有阻塞式方法在等待执行,并且又同时与客户端没有了连接,这样服务端就会报出异常。

本人验证的时候忘记截图,而且要截的也实在太多了,楼主可以自己先试下去验证。应该会有一定的理解的。
说的有点乱,希望能够有所帮助。
作者: Mote    时间: 2013-7-24 22:03
简单说,就是清空或停止当前DOS命令
作者: 张强1    时间: 2013-7-24 22:17
你就理解为强制结束dos命令就可以了
作者: 李政    时间: 2013-7-26 23:38
王磊 发表于 2013-7-24 21:08
通过打印语句的逐行验证的结果,有一些个人的理解。
Ctrl+C,是系统底层的一个关键字,通过键入它,可以结 ...

嗯 谢谢了
作者: 王希军    时间: 2013-7-27 13:57
个人理解:首先Ctrl+C是关键字;
          跟循环语句里的关键字“break”相似,跳出当前运行的进程。
         




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2