免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1494 | 回复: 1
打印 上一主题 下一主题

[其他] 向高手求教:按下Ctrl-C使得程序加快的问题(因为解决了sendmail例程所导致的阻塞?) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-06 17:28 |只看该作者 |倒序浏览
本帖最后由 Musikk_P3 于 2012-12-06 11:31 编辑

向各位高手们求教:按下Ctrl-C使得程序加快的问题(因为解决了sendmail例程所导致的阻塞?)

我写了一个程序,利用UNIX的sendmail来批量发送邮件,代码情况如下:


  1. 获得某个文件句柄;

  2. 获得某个MUA对象实例;

  3. while(临时变量 = 按行读(文件句柄)){

  4.         MUA对象.收件人 = 临时变量;

  5.         发送状态 = MUA对象实例.发送方法('sendmail');

  6.         标准输出(发送状态);
  7.         标准输出(Something about something);
  8. }
复制代码
执行该程序,终端显示如下:

  1. ok
  2. Something about 1st
  3. ok
  4. Something about 2nd
  5. ok
  6. Something about 3rd
  7. ok
  8. Something about 4th
  9. ok
  10. Something about 5th
  11. ……
  12. ……
  13. ……
复制代码
在执行过程中,由于sendmail例程(多线程)繁忙,所以,1、2、3、……这样的每个例程,顺次进行下来,过程中,有时进行得就很卡(是不是发生了阻塞?)

在这样的过程中,按下Ctrl-C,该程序不会被终止,反而会执行得快了起来。

我猜想,是Ctrl-C终止了某些sendmail例程,缓解了阻塞,所以,程序就快了。

然而,我不能清楚理解的是:按下Ctrl-C,为什么不是终止程序(程序一直在跑,都不知道该如何停止下来),而是终止了程序所“调用”的sendmail例程呢?

盼C版各位高手,解惑赐教!

谢谢大家了!

论坛徽章:
0
2 [报告]
发表于 2012-12-06 17:42 |只看该作者
SIGINT打断了阻塞的系统调用

应该是被打断的程序没有正确处理信号干扰造成的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP