Am 11.07.2008 um 13:26 schrieb Gwenael Casaccio:
Hello,
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 -