Re: Blocking for input during a loop?
Re: Blocking for input during a loop?
- Subject: Re: Blocking for input during a loop?
- From: Michael Ash <email@hidden>
- Date: Wed, 20 Jan 2010 14:21:21 -0500
On Tue, Jan 19, 2010 at 1:16 PM, Jens Alfke <email@hidden> wrote:
>
> On Jan 19, 2010, at 6:10 AM, Per Bull Holmen wrote:
>
>> I have made one class called GameController, which is overridden by
>> subclasses to control one specific type of game (PS: I will soon rename the
>> class "Controller" to "MainController", and instance variable "controller"
>> to "mainController"). The GameController base class also mediates between
>> input from the main thread, and the game thread, with help from the class
>> InputBuffer:
>
> You've basically implemented coroutines, actually a simple form of an actor,
> using multiple threads. Each coroutine is running an event loop, and the
> game one blocks waiting for incoming events from the UI one.
>
> (Ideally it's possible to implement this without using multiple threads; I
> tried to do that about two years ago using the low-level ucontext library,
> but it turns out that the stack manipulation it does is incompatible with
> Objective-C's exception handling system.)
You might be interested in my MAGenerator code:
http://www.mikeash.com/svn/MAGenerator/
While generators aren't exactly coroutines, they're equivalently
capable (you just need to create a dispatcher to switch between
different active generators). Of course it's a hack, but I'd say much
less of one than low-level stack manipulation, and all the hack is at
the level of syntax.
For this particular case, MAGenerator would allow you to write the
game code in straightforward top-to-bottom code, while still yielding
control to the event loop. Your event responders would invoke the
generator with whatever the user action was, and control would resume
in the generator where it left off. The HTTPParser example in
GeneratorTests.m illustrates this approach, albeit for a very
different purpose.
Mike
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden