

class EventLoop:

    def __init__ (self):
        self._queue = []
        self._defaultinvocation = None

    def queueInvocation(self, function, args):
        self._queue.append((function, args))

    def defaultInvocation(self, function, args):
        self._defaultinvocation = (function, args)

    def run(self):
        while True:
            if len(self._queue) > 0:
                (function, args) = self._queue.pop()
                function(self, args)
            elif self._defaultinvocation:
                (function, args) = self._defaultinvocation
                function(self, args)
            else:
                break
            



class EventLoop:

    def __init__ (self):
        self._queue = []
        self._running = False

    def queueInvocation(self, function, args):
        self._queue.append((function, args))

    def defaultInvocation(self, function, args):
        self._defaultinvocation = (function, args)

    def quit():
        self._running = False

    def run(self):
        self._running = True
        while True:
            if not self._running:
                break
            if len(self._queue) > 0:
                (function, args) = self._queue.pop()
                function(self, args)
            elif self._defaultinvocation:
                (function, args) = self._defaultinvocation
                function(self, args)
            else:
                break
            

Add a way to have the loop quit after current invocation has been processed.
Add a way to have the loop quit after current invocation has been processed.

  
  
  class EventLoop:
  
      def __init__ (self):
          self._queue = []
-         self._defaultinvocation = None
+         self._running = False
  
      def queueInvocation(self, function, args):
          self._queue.append((function, args))
  
      def defaultInvocation(self, function, args):
          self._defaultinvocation = (function, args)
  
+     def quit():
+         self._running = False
+ 
      def run(self):
+         self._running = True
          while True:
+             if not self._running:
+                 break
              if len(self._queue) > 0:
                  (function, args) = self._queue.pop()
                  function(self, args)
              elif self._defaultinvocation:
                  (function, args) = self._defaultinvocation
                  function(self, args)
              else:
                  break
              
  
Add a way to have the loop quit after current invocation has been processed.
## Code Before:


class EventLoop:

    def __init__ (self):
        self._queue = []
        self._defaultinvocation = None

    def queueInvocation(self, function, args):
        self._queue.append((function, args))

    def defaultInvocation(self, function, args):
        self._defaultinvocation = (function, args)

    def run(self):
        while True:
            if len(self._queue) > 0:
                (function, args) = self._queue.pop()
                function(self, args)
            elif self._defaultinvocation:
                (function, args) = self._defaultinvocation
                function(self, args)
            else:
                break
            

## Instruction:
Add a way to have the loop quit after current invocation has been processed.
## Code After:


class EventLoop:

    def __init__ (self):
        self._queue = []
        self._running = False

    def queueInvocation(self, function, args):
        self._queue.append((function, args))

    def defaultInvocation(self, function, args):
        self._defaultinvocation = (function, args)

    def quit():
        self._running = False

    def run(self):
        self._running = True
        while True:
            if not self._running:
                break
            if len(self._queue) > 0:
                (function, args) = self._queue.pop()
                function(self, args)
            elif self._defaultinvocation:
                (function, args) = self._defaultinvocation
                function(self, args)
            else:
                break
            
