[Vm-dev] Events handling for SqueakGtk
bert at freudenbergs.de
Fri Jul 11 11:30:43 UTC 2008
Am 11.07.2008 um 13:26 schrieb Gwenael Casaccio:
> I am the student who is working for the SqueakGtk plugin and I have
> a small problem.
> For the events handling there is an *active waiting system* like
> this :
> mainLoopProcess := [
> [self doMainIteration.
> self doSignalProcessing] forkAt: Processor userBackgroundPriority
> + 1
> ] repeat
> ] forkAt: Processor userBackgroundPriority
> It consumes a lot of cpu time.
> the problem is the method doMainIteration which call a C method to
> get an hypothetic event,
> I would like to replace this C method by an other method but this
> new method will block the interpreter
> until there is an event.
> To solve this problem I'll create a C thread and say to the vm
> change the status of the current process
> call the blocking method and when there is an event wake up the
> process to say I've finished my work.
> Is there a way to solve this problem ?
The canonical way to do this is have the Smalltalk process wait on a
Semaphore, and signal that Semaphore from the VM if there is anything
to do. See senders of "Smalltalk registerExternalObject:
someSemaphore" for examples.
- Bert -
More information about the Vm-dev