2017-05-19 19 views
0

私はグラフィックアプリケーションでいくつかのビデオ計算とマウスイベントリスニングを含むpygameを使っています。私はラズベリー3、raspbian jessieとpython2.7を使用しています。Pygame: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

私の推測では、pygameは制限されたサイズの循環イベントキューを使用しています。満杯になると、新しいイベントがそれぞれ最も古いイベントを置き換えます。もしあなたが今まで以上に多くの出来事を取ったら、とにかくそれらを捨てなければならないので、彼らを行かせてください。

散発的な遅い計算がある場合、追いつくことが可能である可能性がある場合、デフォルトのキューがいっぱいになる前にイベントを取得するのに十分な時間だけ計算を分割する必要があります。取得したらすぐに処理するか、より大きなcatch_upキューに入れてください。それを行う最善の方法は、コードの詳細によって異なります。

または、提案されているスレッドソリューションを調べてください。

関連する問題