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() |