Tôi có một nhiệm vụ đơn giản cần chờ đợi một thứ gì đó thay đổi trên hệ thống tập tin (về cơ bản nó là trình biên dịch cho nguyên mẫu). Vì vậy, tôi đã có một vòng lặp vô hạn đơn giản với một giấc ngủ 5 giây sau khi kiểm tra các tập tin thay đổi.Phát hiện bấm phím (không chặn) w/o getc/được trong Ruby
loop do
# if files changed
# process files
# and puts result
sleep 5
end
Thay vì số Ctrl+C
chào, tôi muốn kiểm tra xem liệu khóa đã được nhấn chưa, không chặn vòng lặp. Về cơ bản tôi chỉ cần một cách để nói nếu có các phím bấm đến, sau đó một cách để lấy chúng cho đến khi một Q được đáp ứng, sau đó thoát ra khỏi chương trình.
Những gì tôi muốn là:
def wait_for_Q
key_is_pressed && get_ch == 'Q'
end
loop do
# if files changed
# process files
# and puts result
wait_for_Q or sleep 5
end
Hoặc, là một cái gì đó này của Ruby chỉ không làm (tốt)?
Đáng buồn là tôi đang trên cửa sổ, và điều này ném một Errno :: EBADF, hoặc lỗi xấu-file. Tôi sẽ điều tra các lựa chọn của tôi. –
Hãy thử chụp EBADF với EINTR và EAGAIN- nó có thể chỉ là một lỗi tạm thời cho đến khi bạn thực sự gõ một số đầu vào (không chắc chắn, không phải trên cửa sổ) – rampion
Tôi có thể làm tương tự trên C hoặc PHP hoặc Perl ?? bất kỳ mã nào ra khỏi đó? –