logo       

[ruby-list:42495] sleep等の不可解な問題発生(なぜでしょうか): msg#00149

lang.ruby.japanese

Subject: [ruby-list:42495] sleep等の不可解な問題発生(なぜでしょうか)

いつもお世話になっております。
スクリプト中でsleep(2)を実行すると、無限に応答がない状態になります。
また、次ぎの実例3に示すような同様の不可解な現象が発生しました。
Rubyのバグとは思えませんが、理由を教えてください。

なお、Rubyは、Windows2000上でruby 1.8.2 (2004-11-06) [i386-mswin32]をRDE
で使用しています。

1 使用の目的
 ある時刻になったら、自動的にスクリプトを実行させるために、簡単な事例を用い
て検討を始めました。

2 実例1
 例えば、5秒間隔でprint命令を出すために、次ぎのスクリプトを実行すると、秒
が同一数値のために、
当然ながら、1200回以上も表示されます。そこで、1秒間待つために、sleep 1
 を入れました。
 ところが、sleep 0と同じ働きを示し、全く表示されません。

3 実例2
 そこで、同じことですが、さらに簡単なスクリプトで試したのですが、同じ結果で
す。
 これでは、sleepの機能が正しく機能していないとしか言えませんが、どこに
間違いがあるのでしょうか。
 PCを変更しても同様でした。

4 実例3
 障害回避策として、実例3を試しました。この場合も表示されない状態でした。
 そこで、 ts = time.secの前にpを入れると正しく表示され、初期の目的は達成さ
れます。
 p ts = time.sec # <= pを省略すると表示されなくなる。
 pを書き込むことで異常は回避されるますが、直接にロジックとは無関係ですの
で、何故このような不具合が発生するのかと嫌な気分です。

# 実例1
while (1)
time=Time.now
if time.sec%5==0 then
printf("%d %d %d\n",time.hour, time.min, time.sec)
sleep 1
end
end

# 実例2
t=0
while (1)
sleep(2.2)
t+=1
print t
end

# 実例3  
ts=0
while (1)
time=Time.now
if time.sec%5==0 then
if ts != time.sec then
printf("%d %d %d\n",time.hour, time.min, time.sec)
p ts = time.sec # <= pを省略すると表示されなくなる。
end
end
end

矢幡





<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise