This is MiscThreadedObject.rtf in view mode; [Download] [Up]
Release 1.0 Copyright ©1994 by Steve Quirk All Rights Reserved.
MiscThreadedObject
Inherits From: Object
Declared In: MiscThreadedObject.h
Class Description
A threaded object can run in it's own thread. Simply send a -runInNewThread message to the instance and a thread will be created and the instance's 'run' method will be invoked. The thread will be destroyed when the run method returns. To be useful, a subclass must override the run method - this implementation simply returns self.
By default, the instance is sent a 'free' message after the 'run' method returns. Override this behaviour by sending 'freeAfterRun:NO'. Of course, don't call 'free' until after run returns.
To aid debugging, the name of the thread will be set to whatever is returned by [self name], thus showing something useful in gdb's 'tl' command. Override -name if you want to customize that.
Instance Variables
cthread_t objThread;
thread_info_t info;
thread_info_t schedInfo;
BOOL freeOnReturnFromRun;
objThread The object's cthread handle.
info Used to hold data returned from thread_info.
schedInfo Used to hold data returned from thread_info.
freeOnReturnFromRun Flag to indicate whether instance should be freed when the run method returns.
Method Types
- abort
+ errno
- fork
- freeAfterRun
- freeAfterRun:
+ getThreadLimit
- join
- resume
- run
- runInNewThread
+ setThreadLimit:
- suspend
- switchTo
- threadInfo
- threadSchedInfo
Class Methods
errno
+ (int)errno
Returns the current thread's errno value.
See also: intro(2) Unix man page.
getThreadLimit
+ (int)getThreadLimit
Returns the maximum number of threads for this task. A limit of 0 indicates that limits are not enforced.
See also: setThreadLimit:
setThreadLimit:
+ (void)setThreadLimit:(int)newLimit
Sets the maximum number of threads for this task to newLimit. Specify zero if you want no limit.
See also: getThreadLimit
Instance Methods
abort
- abort
Interupt the receiver. abort interrupts system calls; it's usually used along with suspend, which stops the receiver from executing any more user code. Sending abort to a thread that isn't suspended is risky, since it's difficult to know exactly what system trap, if any, the thread might be executing and whether an interrupt return would cause the thread to do something useful
See also: suspend, cthread_abort()
fork
- fork
Fork an instance. The fork message creates a new thread of control and sends the instance a run message. The thread is not detached and may be waited upon with the join method.
The new thread will be named according to [self name], which defaults to the class name.
See also: join, runInNewThread, cthread_fork(), cthread_name()
freeAfterRun
- (BOOL)freeAfterRun
Returns a flag indicating whether the instance will be freed when it's run method returns.
See also: freeAfterRun:, run
freeAfterRun:
- freeAfterRun:(BOOL)yesOrNo
Indicates whether the instance should be freed after the run method returns. By default, a MiscThreadedObject will be sent a free message following run. This allows an application to start the object and forget about it.
See also: run, freeAfterRun
join
- (any_t)join
This method suspends the sender until the receiver completes its run method. Returns 0 if run returned self, 1 otherwise.
See also: fork, run, cthread_join()
resume
- resume
Decrements the receiver's suspend count.
See also: suspend, thread_resume()
run
- run
The focus of action in a MiscThreadedObject. To be useful, subclass must implement this method.
See also: runInNewThread, freeAfterRun
runInNewThread
- runInNewThread
Causes the receiver to be forked and detached. You cannot send a join message to an instance that has been detached in this way.
See also: fork, cthread_detach()
suspend
- suspend
Suspends the receiver by incrementing the suspend count and prevents the thread from executing any more user-level instructions.
See also: resume, threadInfo, thread_suspend()
switchTo
- switchTo
Causes the scheduler to do a context switch into the receiver's thread. The sender's thread will be rescheduled.
See also: thread_switch(t ,SWITCH_OPTION_NONE,0)
threadInfo
- (thread_info_t)threadInfo
Returns a pointer to the receiver's thread_basic_info struct. The struct is defined as
struct thread_basic_info {
time_value_t user_time; /* user run time */
time_value_t system_time; /* system run time */
int cpu_usage; /* scaled cpu usage percentage */
int base_priority; /* base scheduling priority */
int cur_priority; /* current scheduling priority */
int run_state; /* run state (see below) */
int flags; /* various flags (see below) */
int suspend_count; /* suspend count for thread */
long sleep_time; /* number of seconds that thread
has been sleeping */
};
See also: threadSchedInfo, thread_info()
threadSchedInfo
- (thread_info_t)threadSchedInfo
Returns a pointer to the receiver's thread_basic_info struct. The struct is defined as
struct thread_sched_info {
int policy; /* scheduling policy */
int data; /* associated data */
int base_priority; /* base priority */
int max_priority; /* max priority */
int cur_priority; /* current priority */
boolean_t depressed; /* depressed ? */
int depress_priority; /* priority depressed from */
};
See also: threadInfo, thread_info()
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.