On 8 Feb 2007, at 11:06, Xavier Glattard wrote:
Hi all
I try to understand NSRunLoop and event management.
I have found the following text in NSRunLoop.h
It's about GSRunLoopWatcher
* The following interface is not yet deprecated,
* but may be deprecated in the next release and
* removed thereafter.
*
* The run loop watcher API was originally intended to perform two
* tasks ...
* 1. provide the most efficient API reasonably possible to integrate
* unix networking code into the runloop.
* 2. provide a standard mechanism to allow people to contribute
* code to add new I/O mechanisms to GNUstep (OpenStep didn't allow
this).
* It succeeded in 1, and partially succeeded in 2 (adding support
* for the win32 API).
*
* However, several years on, CPU's are even faster with respect to
I/O
* and the performance issue is less significant, and Apple have
provided
* the NSStream API which allows yoiu to write stream subclasses
and add
* them to the run loop.
*
* We are likely to follow Apple for compatibility, and restructure
code
* using NSStream, at which point this API will be redundant.
What is the status of GSRunLoopWatcher ?
Current, as described in the text you quote which warns that Apple
appear to be close to providing a general API for the task (even
though it's not clear yet) and we will probably adopt it.
Why is it not use in backend ?
It is used in the backend ... see back/Source/win32/WIN32Server.m
which handles the received events.
(under win32, PeekMessage/DispatchMessage are called firth by the
DisplayServer
then by GSRunLoopCtxt)
If you look carefully at the GSRunLoopCtxt code, you will see that
DispatchMessage is called only for unhandled messages (ie those not
passed on to a GSRunLoopWatcher).
I don't know why the -callback: method is also called ... I would
have thought that it was unnecessary, but perhaps it's a performance
tweak. ie, after receiving an event via the runloop mechanism the
code then removes any other events from the windows queue directly.
Maybe someone else can better answer this.
Is there an other mechanism on the way ?
Not yet.
If i want to add joystick support to GNUstep, which interface do i
have to use ?
I think that depends on how the operating system presents the
joystick interface. If it appears as a file from which you read
data, then it's probably best to open that file as an NSInputStream
and use that API, otherwise using GSRunLoopWatcher is the way to go.
You can look at the code of the NSStream subclasses to see how then
use GSRunLoopWatcher internally.
_______________________________________________
Gnustep-dev mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/gnustep-dev