无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 7781|回复: 15
打印 上一主题 下一主题

本人做的PEWaitKill,附源码,希大家帮测试。

[复制链接]
1#
发表于 2006-10-20 10:39:50 | 显示全部楼层
回复

使用道具 举报

2#
发表于 2006-10-20 10:51:20 | 显示全部楼层
原帖由 hahahei 于 2006-10-20 10:40 发表
我问下,需不需要指定延迟时间,比如30秒或者什么的?

当然需要的,你看说明吧
回复

使用道具 举报

3#
发表于 2006-10-20 10:51:26 | 显示全部楼层
  1. var StartTime: Cardinal;
  2. begin
  3.   StartTime := GetTickCount;
  4.   repeat
  5.     Windows.Sleep(200);
  6.   until ((GetTickCount - StartTime) > TimeToWait);
  7. end;
复制代码

有一点需要请教一下,既然我们默认的延时是以秒为单位的,Windows.Sleep 后面的毫秒数可不可以增大一点,比如 500 ?这样的话在同样的时间内执行的循环会比较少。至于时间精确度,那倒无所谓的,只是用来 Kill 进程,主要不是用来计时。

因为我以前在 ASP 中做延时函数(ASP 默认没有)的时候,发现时间跳跃单位越小,资源占用情况越大。像以下的代码,在执行期间,CPU 的占用率几乎是 95%~100%
  1. Sub TimeDelay(DelaySeconds)                                                        '老毛桃自己写的延时函数,可以精确到毫秒级
  2.         dim Time1
  3.         Time1=Timer()
  4.         While Timer()<Time1+DelaySeconds
  5.         Wend
  6. End Sub
复制代码

因为它没有支持支持 Windows.Sleep 这样的命令,时间跳跃单位为零,仅仅依靠反复的循环来达到拖延时间。但目前我没有更好的方法来实现这一功能。不知道老九和  asbai 兄弟可否有高见?
回复

使用道具 举报

4#
发表于 2006-10-20 11:28:23 | 显示全部楼层
原帖由 asbai 于 2006-10-20 11:20 发表
在这个用例中,轮询粒度设成 50 ms 还是 500 毫秒其实根本无关紧要,呵呵。因为轮询的成本很低,只不过是做一次整型运算和比较而已。即使把粒度设成 10ms 也不太可能看到 CPU 有任何波动。:)
嘿嘿,受教了!
原帖由 asbai 于 2006-10-20 11:20 发表
至于 ASP 偶也没玩过,不过一般在不支持延迟的环境下实现等待通常用一种变通方法:执行一个阻塞操作,例如:连接一个不存在的 IP 地址,连接超时就是你的 wait 值。连接数据库、超时等待一个信号等等。

感谢提醒,我改天将我的程序尝试看看能不能这样延时!

不瞒你说,我曾经用过更加“无奈”的方法,让 ASP 执行数百万次的整数或浮点运算,后来发现这样执行时的 CPU 占用率更高!但是对于更加牛 B 的机器,运算速度过快,却仍然达不到延时的效果,才写了 6 楼的那个延时函数。
回复

使用道具 举报

5#
发表于 2006-10-20 12:17:15 | 显示全部楼层
原帖由 asbai 于 2006-10-20 11:46 发表

这个。。。。。咳。。咳。。请毛桃兄三思。通常在网络服务端做同步等待是十分有害的行为。因为这会显著增加每个用户请求所占用的服务器资源。在并发数稍高的环境下,这样的做法会迅速消耗服务器的工作线程池、可 ...

感谢提醒,我到《我是网管》看了看,似乎能够找到更好一些的方案了。不过不跑题了,我们继续讨论该讨论的,哈哈!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-5-7 21:30

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表