def waiter(self, count, *names):
        '''
        Construct and return a new Waiter for events on this base.

        Example:

            # wait up to 3 seconds for 10 foo:bar events...

            waiter = base.waiter(10,'foo:bar')

            # .. fire thread that will cause foo:bar events

            events = waiter.wait(timeout=3)

            if events == None:
                # handle the timout case...

            for event in events:
                # parse the events if you need...

        NOTE: use with caution... it's easy to accidentally construct
              race conditions with this mechanism ;)

        '''
        return Waiter(self, count, self.loop, *names)
Construct and return a new Waiter for events on this base.

        Example:

            # wait up to 3 seconds for 10 foo:bar events...

            waiter = base.waiter(10,'foo:bar')

            # .. fire thread that will cause foo:bar events

            events = waiter.wait(timeout=3)

            if events == None:
                # handle the timout case...

            for event in events:
                # parse the events if you need...

        NOTE: use with caution... it's easy to accidentally construct
              race conditions with this mechanism ;)