Browse Source

Try to make the pause/resume loop not busy.

pull/95/merge
Rapptz 9 years ago
parent
commit
3d21a186fe
  1. 15
      discord/voice_client.py

15
discord/voice_client.py

@ -62,7 +62,8 @@ class StreamPlayer(threading.Thread):
self.frame_size = encoder.frame_size self.frame_size = encoder.frame_size
self.player = player self.player = player
self._end = threading.Event() self._end = threading.Event()
self._paused = threading.Event() self._resumed = threading.Event()
self._resumed.set() # we are not paused
self._connected = connected self._connected = connected
self.after = after self.after = after
self.delay = encoder.frame_length / 1000.0 self.delay = encoder.frame_length / 1000.0
@ -71,8 +72,10 @@ class StreamPlayer(threading.Thread):
self.loops = 0 self.loops = 0
self._start = time.time() self._start = time.time()
while not self._end.is_set(): while not self._end.is_set():
if self._paused.is_set(): # are we paused?
continue if not self._resumed.is_set():
# wait until we aren't
self._resumed.wait()
if not self._connected.is_set(): if not self._connected.is_set():
self.stop() self.stop()
@ -98,15 +101,15 @@ class StreamPlayer(threading.Thread):
pass pass
def pause(self): def pause(self):
self._paused.set() self._resumed.clear()
def resume(self): def resume(self):
self.loops = 0 self.loops = 0
self._start = time.time() self._start = time.time()
self._paused.clear() self._resumed.set()
def is_playing(self): def is_playing(self):
return not self._paused.is_set() and not self.is_done() return self._resumed.is_set() and not self.is_done()
def is_done(self): def is_done(self):
return not self._connected.is_set() or self._end.is_set() return not self._connected.is_set() or self._end.is_set()

Loading…
Cancel
Save