netegg 发表于 2012-4-23 16:14:26

回复 11# xms77
和多线程无关,多线程加sleep试试,一样歇菜

黑色袜子 发表于 2012-4-25 21:28:36

for $i=1 to 100
sleeep(100)
next

happytc 发表于 2012-4-26 10:23:02

本帖最后由 happytc 于 2012-4-26 10:24 编辑


和多线程无关,多线程加sleep试试,一样歇菜
netegg 发表于 2012-4-23 16:14 http://www.autoitx.com/images/common/back.gif

当然有关了,怎么说没有呢?
当是多线程时,我们就可以用另外的线程给这个Sleep线程发信号(SIGALRM,SIGINT),也就是来个软中断,一但收到信号sleep函数就可以中断了。
不过的是:软中断有两种运行模式,一种是在中断模式下,一种是内核线程模式,而一般的都是在中断模式中,中断模式上下文下运行的东西,由于没有自己独立的内核管理,如没有独立的内核栈等,故尔不能sleep后还能产生调度,也就是这样中断后,只是不能恢复它原来执行的状态了,但中断Sleep是没有问题的(若是内核线程模式,还可以恢复它原来的执行状态呢)。还有就是windows不是实时操作系统,可能中断时会产生一定的延时误差,也就是有时把阻塞队列放到就绪队列中去,也不会马上产生调度。但这种误差也是毫秒级的,当然若你把这个中断线程做成内核线程时这种延时基本就可以解决,简单地可以提高中断线程的优先级别,那么在就绪时更可能被调度。


当然au3只有一个主线程,上面说这些都是扯蛋了!

ceoguang 发表于 2012-4-26 10:54:31

TO楼上,那是APC中的SleepEx.

sanmoking 发表于 2012-4-27 12:14:50

{:face (303):}表示从不使用超过Sleep50的飘过,
页: 1 [2]
查看完整版本: 怎么中断一个sleep