[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: nonblocking I/O
From: |
richard |
Subject: |
Re: nonblocking I/O |
Date: |
Thu, 26 Oct 2000 23:26:47 +0100 |
On Thu, 26 Oct 2000 23:53:46 +0200, phr@studiosendai.com wrote:
> Hi,
>
> in OPENSTEP and MOSX, there is some 'hidden' functionality to allow
> nonblocking I/O using NSFileHandling. On MOSX there exists i.e. a method
> -availableDataNonBlocking, on OPENSTEP there is some old NEXTSTEP 'derived'
> functionality available, not documented but visible from the header (can't
> check it right now, since I do not have access to OPENSTEP anymore).
>
> Is there something comparable in GNUstep as well, or what might I use to
> implement for example logging of other tasks' stdout using pipes from a
> GNUstep app? -readInBackgroundAndNotify does not do the job, as it seems.
Not sure what you want or why -readInBackgroundAndNotify doesn't do the job.
You probably want
-waitForDataInBackgroundAndNotify (notifies when a handle is readable)
-writeInBackgroundAndNotify: (notifies when a handle is writable)
-initAsClientInBackgroundAtAddress:service:protocol: (socket connect)
GNUstep also provides a lower-level, but more efficient (callback rather
than notification) mechanism for monitoring things in NSRunLoop.
>From NSRunLoop.h -
/*
* GNUstep extensions
*/
typedef enum {
ET_RDESC, /* Watch for descriptor becoming readable. */
ET_WDESC, /* Watch for descriptor becoming writeable. */
ET_RPORT, /* Watch for message arriving on port. */
ET_EDESC /* Watch for descriptor with exception data. */
} RunLoopEventType;
@protocol RunLoopEvents
/*
* Callback message sent to object waiting for an event in the
* runloop when the limit-date for the operation is reached.
* If an NSDate object is returned, the operation is restarted
* with the new limit-date, otherwise it is removed from the
* run loop.
*/
- (NSDate*) timedOutEvent: (void*)data
type: (RunLoopEventType)type
forMode: (NSString*)mode;
/*
* Callback message sent to object when the event it it waiting
* for occurs. The 'data' and 'type' valueds are those passed in the
* original addEvent:type:watcher:forMode: method.
* The 'extra' value may be additional data returned depending
* on the type of event.
*/
- (void) receivedEvent: (void*)data
type: (RunLoopEventType)type
extra: (void*)extra
forMode: (NSString*)mode;
@end
/*
* These next two are general purpose methods for letting objects
* ask the runloop to watch for events for them. Only one object
* at a time may be watching for a particular event in a mode, but
* that object may add itsself as a watcher many times as long as
* each addition is matched by a removal (the run loop keeps count).
* Alternatively, the 'removeAll' parameter may be set to 'YES' for
* [-removeEvent:type:forMode:all:] in order to remove the watcher
* irrespective of the number of times it has been added.
*/
- (void) addEvent: (void*)data
type: (RunLoopEventType)type
watcher: (id<RunLoopEvents>)watcher
forMode: (NSString*)mode;
- (void) removeEvent: (void*)data
type: (RunLoopEventType)type
forMode: (NSString*)mode
all: (BOOL)removeAll;
- nonblocking I/O, Philippe C . D . Robert, 2000/10/26
- Re: nonblocking I/O,
richard <=