Tôi có một hàm chạy dấu() cho tất cả người chơi và đối tượng trong máy chủ trò chơi của tôi. Tôi làm điều này bằng cách lặp qua một bộ sau mỗi giây. Tôi cần nó là một chất rắn .1. Rất nhiều thời gian và toán học phụ thuộc vào việc tạm dừng này là chính xác nhất có thể .1 giây. Để đạt được điều này, tôi đã thêm chủ đề này vào chuỗi đánh dấu:Python - time.sleep() bù đắp theo thời lượng mã
start_time = time.time()
# loops and code and stuff for tick thread in here...
time_lapsed = time.time() - start_time # get the time it took to run the above code
if 0.1 - time_lapsed > 0:
time.sleep(0.1 - time_lapsed)
else:
print "Server is overloaded!"
# server lag is greater that .1, so don't sleep, and just eat it on this run.
# the goal is to never see this.
Câu hỏi của tôi là, đây là cách tốt nhất để làm điều này? Nếu thời lượng của vòng lặp của tôi là 0,01, thì time_lapsed == 0,01 ... và sau đó giấc ngủ chỉ nên là 0,09. Tôi hỏi, bởi vì nó dường như không hoạt động. Tôi bắt đầu nhận được tin nhắn máy chủ bị quá tải vào ngày khác, và máy chủ chắc chắn không bị quá tải. Bất kỳ suy nghĩ về một cách tốt để "tự động" kiểm soát giấc ngủ? Có thể có một cách khác để chạy mã cứ sau mỗi phần mười giây mà không ngủ?
Tôi sẽ thực hiện 'try: time.sleep (0.1 - elapsed); ngoại trừ: pass' chỉ để giảm thời gian tính toán với câu lệnh if. Nhưng tất cả mọi thứ khác có vẻ tốt – inspectorG4dget
Có vẻ như khá rõ ràng rằng đối với một số lý do của bạn 'vòng và mã và các công cụ cho chuỗi đánh dấu' là dùng dài hơn 100ms. Bạn chắc chắn rằng máy chủ "chắc chắn không bị quá tải"? – bdares
Bạn đang sử dụng hệ điều hành nào? Điều quan trọng là chọn chức năng tốt nhất –