2015-12-04 20 views
6

私はキーボード割り込みを待つとし、いくつかは、マルチスレッド環境で終了する前に操作をクリーンアップを可能にするためにループを使用しています。`ループ{}` `対ループ{睡眠1}`

begin 
    loop {} 
rescue Interrupt 
    p "Ctr-C Pressed..Cleaning Up & Shutting Down" 
    loop do 
    break if exit_bool.false? 
    end 
    exit 130 
end 

このコードはメインスレッドで実行されます。複数のスレッドが複数のファイルとDB操作を実行しています。 exit_boolは、それらがいくつかの操作の途中でであることを示すために、他のスレッドによって設定された原子VARです。私は値をチェックし、それがfalseして終了を点灯するまで待ちます。

loop{}の費用はloop{sleep x}ではないと思います。高いCPU使用率(〜100%)で

答えて

7

loop {}結果、loop { sleep x }がない一方。

別のオプションは、永遠にちょうどsleepにある:

begin 
    sleep 
rescue Interrupt 
    # ... 
end