2017-05-19 5 views
0

일부 비디오 계산 및 마우스 이벤트 수신과 관련된 그래픽 응용 프로그램에서 파이 게임과 함께 작업하고 있습니다. 나는 라스베리 3, raspbian jessie 및 python2.7을 사용하고 있습니다.파이 게임 : 높은 CPU 부하에서 이벤트가 누락되었습니다.

제목은 다음과 같습니다. 특히 CPU로드가 높을 때 마우스 이벤트가 느슨합니다. 나는이 작은 exemple에서이 문제를 재현 관리 :

import pygame 
import time 
pygame.init() 
pygame.display.set_caption('Crash!') 
window = pygame.display.set_mode((300, 300)) 
running = True 
Rectplace = pygame.draw.rect(window, (255, 0, 0),(100, 100, 100, 100)) 
pygame.display.update() 
while running: 
    time.sleep(0.1) 
    for event in pygame.event.get(): 
     print(`event`) 
     if event.type == pygame.QUIT: 
      running = False 

빠른 롤에 폐기, 마우스 휠 이벤트의 대부분 (버튼 4 & 5)이 스크립트를 실행하는 경우. CPU로드를 시뮬레이트하는 time.sleep(0.1)을 제거하면 이벤트 수신기를 완벽하게 신뢰할 수 있습니다.

나는 느린 계산 부분을 제거 할 수 없으며 더 많은 부분을 최적화 할 수 없기 때문에 이러한 이벤트를 다시 가져 오려면 어떻게해야합니까?

두뇌를 공유해 주셔서 감사합니다!

+0

스레딩 및 이벤트 큐? –

답변

1

제 생각에 파이 게임은 제한된 크기의 순환 이벤트 큐를 사용합니다. 가득 차면 각 새 이벤트가 가장 오래된 이벤트를 대체합니다. 당신이 처리 할 수있는 것보다 더 많은 사건을 얻는다면, 어쨌든 그들을 버려야하므로, 그들을 놓아 둡시다.

산발적 인 느린 계산이있는 경우 따라 잡기가 가능할 수 있으므로 기본 대기열이 가득 채워지기 전에 이벤트를 얻을 수있을만큼 충분히 짧은 시간으로 계산을 분해해야합니다. 당신이 그들을 얻을 때, 즉시 처리하거나 큰 catch_up 대기열에 넣어. 이를 수행하는 가장 좋은 방법은 코드의 세부 사항에 달려 있습니다.

또는 제안 된 실 솔루션을 조사하십시오.