Örneğin, bir zamanlayıcı yapmak istiyorsam, döngüde nasıl bir gecikme yapabilirim, bu sayede saniyeler içinde sayılır ve yalnızca bir milisaniye içinde dönmezler mi?Ruby'de bir döngüde gecikme nasıl yapılır?
cevap
'açıklama' Yukarıdaki istediler çok basit doğrudan soru verilir Cevabınız şöyledir:
1.upto(5) do |n|
puts n
sleep 1 # second
end
Bu sizin kod kalanını engellemeden, periyodik bir yöntem çalıştırmak istediğiniz olabilir. Bu durumda, (kod iki adet aynı anda aynı veri yapısını değiştirmeye çalışırken değil emin olmak için ve muhtemelen bir muteksi oluşturun) bir iş parçacığı kullanmak istiyorum: Her nasılsa
require 'thread'
items = []
one_at_a_time = Mutex.new
# Show the values every 5 seconds
Thread.new do
loop do
one_at_a_time.synchronize do
puts "Items are now: #{items.inspect}"
sleep 5
end
end
end
1000.times do
one_at_a_time.synchronize do
new_items = fetch_items_from_web
a.concat(new_items)
end
end
, birçok kişi düşünüyorum argümanı çalışacak şekilde sabit bir zaman aralığına sahip bir sleep
yönteminin eklenmesi. Ancak, hiçbir yöntemin sıfır zaman almadığını unutmayın. Bir döngü içinde sleep(1)
koyarsanız, döngüde başka içeriğiniz olduğu sürece döngü kesinlikle 1
saniyeden daha fazla olacaktır. Daha da kötüsü, her zaman bir döngünün her yinelemesini işlerken aynı zaman almaz. Her döngü, hata rasgele olarak 1
saniyeden daha uzun sürer. Döngü çalışmaya devam ettikçe, bu hata her zaman pozitif yönde büyüyecek ve büyüyecektir. Özellikle, bir zamanlayıcı istiyorsan, döngünün önemli olduğu yerde, bunu yapmak istemezsin.
sabit belirtilen zaman aralığı ile döngüye doğru yolu böyle yapmak şudur: Sen döngü içinde `uyku 1` 1 saniye uyku olabilir
loop do
t = Time.now
#... content of the loop
sleep(t + 1 - Time.now)
end
Hatayı üreten: TypeError: Zaman aralığına dönüştürülemiyor –
Aslında çalışıyor :) –
- 1. Nasıl jQuery.each fonksiyonunun her döngüler arasındaki gecikme yapılır?
- 2. Gecikme
- 3. Gecikme
- 4. Gecikme belirli bir süre
- 5. Bir döngüde bekletme süresi nasıl kullanılır
- 6. Ruby'de bir döngüde birkaç yinelemeyi nasıl atlayabilirsiniz?
- 7. jAlert bir döngüde düzgün çalışmıyor
- 8. Tek bir döngüde sıralı olarak birden çok liste arasında nasıl geçiş yapılır?
- 9. Javascript: Bir Döngüde İşlevler Oluşturma
- 10. Vaat ettiğiniz gibi ve karma/açısal bir gecikme ile nasıl bir gecikme simülasyonu yapabilirim?
- 11. Gecikme ile Segue Nasıl Gerçekleştirilir
- 12. jquery'de gecikme süresi nasıl ayarlanır?
- 13. AudioQueueDispose gecikme
- 14. temel gecikme
- 15. Vba hatası döngüde işleniyor
- 16. Linq'de bir döngüde OR ifadeleri ekleme
- 17. jQuery ajax her döngüde
- 18. Döngüde işlevler oluşturma
- 19. Gözlenebilirler "retryWhen" Ben <code>retryWhen</code> bir gecikme ayarlayabilirsiniz nasıl gecikme
- 20. Döngüde aynı dizgi ekle + =?
- 21. Bunu, özyinelemeli işlev yerine döngüde nasıl değiştirebilirim?
- 22. Metin dosyasından satırları satırdan ayıklamak nasıl döngüde
- 23. Geçerli çalışan kimliğini döngüde nasıl alabilirim?
- 24. C++ ile döngüde FPS nasıl sınırlanır?
- 25. Döngüde gezinmek için tablodan değer nasıl kullanılır?
- 26. Gecikme JavaScript işlev yürütme
- 27. Nasıl Yapılır Bir diziyi
- 28. Bir dizi nasıl yapılır?
- 29. Bir segue nasıl yapılır
- 30. Bir kez nasıl yapılır
. http://www.ruby-doc.org/core-2.2.0/Kernel.html#method-i-sleep –
'[5,4,3,2,1] .each {| n | n koyar; Örneğin, uyku 1} 'i her saniyede 5 ila 1 arasında sayılır. Aradığın şey bu mu? –
Önceki yorumlarla aynı fikirdeyim - 'sleep' ile yapay bir gecikme ekleyebilirsiniz. Sadece Float's ve belki de Rational's gibi kesirli değerler sağlayarak saniyeler fraksiyonları için uyuyabileceğinizi ekleyebilirim. –