2015-12-04 27 views
6

Bir Klavye kesme beklemek ve bazıları çok dişli bir ortamda çıkışında önce işlemi temizlemek için daha sonra izin vermek için bir döngü kullanıyorum.`döngü {}` döngü {uyku 1} `karşı`

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

Bu kod parçası ana iş parçacığında çalışır. Birkaç dosya ve DB ops gerçekleştiren birden çok iş parçacığı vardır. exit_bool bazı operasyonun tam ortasında olduğunu tanımlamak için diğer parçacıkları tarafından belirlenen bir atom var olduğunu. Ben değeri için kontrol ve false ve ardından çıkış açılana kadar bekleyin.

loop{}'un maliyetinin loop{sleep x}'un aksine ne olduğunu merak ediyorum. yüksek bir CPU kullanımı (~% 100) 'de

cevap

7

loop {} sonuç, loop { sleep x } bunu yapmaz.

begin 
    sleep 
rescue Interrupt 
    # ... 
end 
:

Başka bir seçenek sadece sleep sonsuza etmektir