ObjFW
src/OFThread.h
00001 /*
00002  * Copyright (c) 2008, 2009, 2010, 2011
00003  *   Jonathan Schleifer <js@webkeks.org>
00004  *
00005  * All rights reserved.
00006  *
00007  * This file is part of ObjFW. It may be distributed under the terms of the
00008  * Q Public License 1.0, which can be found in the file LICENSE.QPL included in
00009  * the packaging of this file.
00010  *
00011  * Alternatively, it may be distributed under the terms of the GNU General
00012  * Public License, either version 2 or 3, which can be found in the file
00013  * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
00014  * file.
00015  */
00016 
00017 #import "OFObject.h"
00018 #import "OFList.h"
00019 
00020 #import "threading.h"
00021 
00022 @class OFDate;
00023 
00027 @interface OFTLSKey: OFObject
00028 {
00029 @public
00030         of_tlskey_t key;
00031 /* Work around a bug in gcc 4.4.4 (possibly only on Haiku) */
00032 #if !defined(__GNUC__) || __GNUC__ != 4 || __GNUC_MINOR__ != 4 || \
00033     __GNUC_PATCHLEVEL__ != 4
00034 @protected
00035 #endif
00036         void (*destructor)(id);
00037         of_list_object_t *listobj;
00038         BOOL initialized;
00039 }
00040 
00044 + TLSKey;
00045 
00050 + TLSKeyWithDestructor: (void(*)(id))destructor;
00051 
00052 + (void)callAllDestructors;
00053 
00057 - init;
00058 
00063 - initWithDestructor: (void(*)(id))destructor;
00064 @end
00065 
00072 @interface OFThread: OFObject
00073 {
00074         id object;
00075         of_thread_t thread;
00076 @public
00077         enum {
00078                 OF_THREAD_NOT_RUNNING,
00079                 OF_THREAD_RUNNING,
00080                 OF_THREAD_WAITING_FOR_JOIN
00081         } running;
00082         id retval;
00083 }
00084 
00088 + thread;
00089 
00094 + threadWithObject: (id)obj;
00095 
00106 + (void)setObject: (id)obj
00107         forTLSKey: (OFTLSKey*)key;
00108 
00117 + (id)objectForTLSKey: (OFTLSKey*)key;
00118 
00122 + (OFThread*)currentThread;
00123 
00129 + (void)sleepForTimeInterval: (int64_t)sec;
00130 
00137 + (void)sleepForTimeInterval: (int64_t)sec
00138                 microseconds: (uint32_t)usec;
00139 
00143 + (void)sleepUntilDate: (OFDate*)date;
00144 
00149 + (void)yield;
00150 
00154 + (void)terminate;
00155 
00161 + (void)terminateWithObject: (id)obj;
00162 
00167 - initWithObject: (id)obj;
00168 
00177 - (id)main;
00178 
00183 - (void)handleTermination;
00184 
00188 - (void)start;
00189 
00195 - (id)join;
00196 @end
00197 
00201 @interface OFMutex: OFObject
00202 {
00203         of_mutex_t mutex;
00204         BOOL initialized;
00205 }
00206 
00210 + mutex;
00211 
00215 - (void)lock;
00216 
00223 - (BOOL)tryLock;
00224 
00228 - (void)unlock;
00229 @end
00230 
00234 @interface OFCondition: OFMutex
00235 {
00236         of_condition_t condition;
00237         BOOL cond_initialized;
00238 }
00239 
00243 + condition;
00244 
00249 - (void)wait;
00250 
00254 - (void)signal;
00255 
00259 - (void)broadcast;
00260 @end
 All Classes Functions Variables