thread utility More...
#include <ZFThread.h>
Public Types | |
enum | |
![]() | |
enum | |
Public Member Functions | |
virtual const ZFClass * | classData (void) |
get instance's class info | |
virtual void | sleepCancel () |
cancel sleep or do nothing if not sleepping | |
virtual zfstring & | threadName () |
thread name for debug use | |
virtual void | threadName (zfstring const &propertyValue) |
see threadName | |
virtual ZFListener & | threadRunnable () |
the main callback to run | |
virtual void | threadRunnable (ZFListener const &propertyValue) |
see threadRunnable | |
virtual void | threadStart (ZFObject *param0=(zft_zfnull), ZFObject *param1=(zft_zfnull)) |
start thread, do nothing if already started | |
virtual zfbool | threadStarted () |
return true if start is called and hasn't been stopped or end | |
virtual zfbool | threadRunning () |
return true only if thread is running | |
virtual void | threadStop () |
request stop the thread, may not be stopped immediately | |
virtual zfbool | threadStopRequested () |
return true if stop is called after start | |
virtual void | threadWait () |
wait until thread finished running | |
virtual zfbool | threadWait (zftimet miliSecs) |
wait until thread finished running, or timeout | |
virtual zfbool | isMainThread () |
return true if current thread is main thread | |
virtual zfbool | isNativeThread () |
true if the thread is registered by nativeThreadRegister | |
virtual void | autoReleasePoolAdd (ZFObject *obj) |
add object to auto release pool attached to this thread | |
virtual void | autoReleasePoolDrain () |
manually drain auto release pool | |
virtual void | taskQueueInit () |
prepare a task queue that can be run in this thread | |
virtual void | taskQueueCleanup () |
see taskQueueInit | |
virtual zfbool | taskQueueAvailable () |
see taskQueueInit | |
virtual zfindex | taskQueueCount () |
see taskQueueInit | |
virtual void | taskQueueAdd (const ZFListener &task) |
see taskQueueInit | |
virtual void | taskQueueRemove (const ZFListener &task) |
see taskQueueRemove | |
virtual zfbool | taskQueueRunning () |
try if any task add by taskQueueAdd is running | |
![]() | |
zfindex | objectRetainCount (void) |
return the object's retain count | |
void | objectInfoOfInstanceT (zfstring &ret) |
see objectInfoOfInstance | |
zfstring | objectInfoOfInstance (void) |
return a short string describe the object instance | |
void | objectInfoT (zfstring &ret) |
see objectInfo | |
zfstring | objectInfo (void) |
return object info | |
zfidentity | objectHash (void) |
get hash of this object | |
ZFCompareResult | objectCompare (ZFObject *anotherObj) |
compare with anotherObj | |
ZFCompareResult | objectCompareValue (ZFObject *anotherObj) |
explicitly compare object by logical value, see objectCompare | |
virtual zfauto | invoke (const zfstring &methodName) |
util method to perform ZFDI_invoke, do nothing if fail | |
virtual zfauto | invoke (const zfstring &methodName, ZFObject *param0, ZFObject *param1=((ZFObject *const &) _ZFP_ZFMP_DEF), ZFObject *param2=((ZFObject *const &) _ZFP_ZFMP_DEF), ZFObject *param3=((ZFObject *const &) _ZFP_ZFMP_DEF), ZFObject *param4=((ZFObject *const &) _ZFP_ZFMP_DEF), ZFObject *param5=((ZFObject *const &) _ZFP_ZFMP_DEF), ZFObject *param6=((ZFObject *const &) _ZFP_ZFMP_DEF), ZFObject *param7=((ZFObject *const &) _ZFP_ZFMP_DEF)) |
util method to perform ZFDI_invoke, do nothing if fail | |
virtual zfbool | invokeT (zfauto &ret, zfstring *errorHint, const zfstring &methodName, ZFObject *param0=((ZFObject *const &) _ZFP_ZFMP_DEF), ZFObject *param1=((ZFObject *const &) _ZFP_ZFMP_DEF), ZFObject *param2=((ZFObject *const &) _ZFP_ZFMP_DEF), ZFObject *param3=((ZFObject *const &) _ZFP_ZFMP_DEF), ZFObject *param4=((ZFObject *const &) _ZFP_ZFMP_DEF), ZFObject *param5=((ZFObject *const &) _ZFP_ZFMP_DEF), ZFObject *param6=((ZFObject *const &) _ZFP_ZFMP_DEF), ZFObject *param7=((ZFObject *const &) _ZFP_ZFMP_DEF)) |
util method to perform ZFDI_invoke, do nothing if fail | |
virtual zfauto | invokeDetail (const zfstring &methodName, const ZFCoreArray< zfauto > ¶ms, zfbool *success=zft_zfnull, zfstring *errorHint=zft_zfnull) |
util method to perform ZFDI_invoke, do nothing if fail | |
zfbool | objectTagExist (void) |
see objectTag, true if this object has tag, and tag can be checked by objectTagGetAllKeyValue | |
void | objectTag (const zfstring &key, ZFObject *tag) |
used to hold a object for app's use, auto retained | |
zfany | objectTag (const zfstring &key) |
see objectTag | |
void | objectTagGetAllKeyValue (ZFCoreArray< zfstring > &allKey, ZFCoreArray< zfauto > &allValue) |
get all key value | |
void | objectTagRemove (const zfstring &key) |
remove tag, same as set tag to null | |
zfauto | objectTagRemoveAndGet (const zfstring &key) |
remove tag, return removed tag or null if not exist | |
void | objectTagRemoveAll (void) |
remove all tag | |
void | observerAdd (zfidentity eventId, const ZFListener &observer, ZFLevel observerLevel=ZFLevelAppNormal) |
see observerNotify | |
void | observerAddForOnce (zfidentity eventId, const ZFListener &observer, ZFLevel observerLevel=ZFLevelAppNormal) |
see observerNotify | |
void | observerRemove (zfidentity eventId, const ZFListener &callback) |
see observerNotify | |
void | observerRemoveAll (zfidentity eventId) |
see observerNotify | |
void | observerRemoveAll (void) |
see observerNotify | |
zfbool | observerHasAdd (void) |
true if any observer has been added | |
zfbool | observerHasAdd (zfidentity eventId) |
true if any observer with eventId has been added | |
void | observerNotify (zfidentity eventId, ZFObject *param0=zft_zfnull, ZFObject *param1=zft_zfnull) |
notify the observer with eventId | |
void | observerNotifyWithSender (ZFObject *customSender, zfidentity eventId, ZFObject *param0=zft_zfnull, ZFObject *param1=zft_zfnull) |
see observerNotify | |
void | observerNotifyReversely (zfidentity eventId, ZFObject *param0=zft_zfnull, ZFObject *param1=zft_zfnull) |
see observerNotify | |
void | observerNotifyReverselyWithSender (ZFObject *customSender, zfidentity eventId, ZFObject *param0=zft_zfnull, ZFObject *param1=zft_zfnull) |
see observerNotify | |
ZFObserver & | observerHolder (void) |
access the internal observer holder | |
void | on (const zfstring &eventName, const ZFListener &observer, ZFLevel observerLevel=ZFLevelAppNormal) |
util to observerAdd | |
void | on (zfidentity eventId, const ZFListener &observer, ZFLevel observerLevel=ZFLevelAppNormal) |
util to observerAdd | |
void | onInit (const ZFListener &impl) |
util for script to achieve chained call | |
void | onDealloc (const ZFListener &impl) |
util for script to achieve chained call | |
zfbool | objectInstanceStateCheck (ZFObjectInstanceState state) |
object instance's state | |
zfbool | objectInitRunning (void) |
util method to check whether ZFObjectInstanceStateOnInit or ZFObjectInstanceStateOnInitFinish running | |
zfbool | objectDeallocRunning (void) |
util method to check whether ZFObjectInstanceStateOnDeallocPrepare or ZFObjectInstanceStateOnDealloc running | |
virtual zfbool | objectIsInternal (void) |
whether this object is internal object or its class is ZFClass::classIsInternal | |
virtual zfbool | objectIsInternalPrivate (void) |
whether this object is internal private object or its class is ZFClass::classIsInternalPrivate | |
Static Public Member Functions | |
static const ZFClass * | ClassData (void) |
get class info | |
static zfidentity | E_ThreadOnRegister (void) |
see ZFObject::observerNotify | |
static zfidentity | E_ThreadOnUnregister (void) |
see ZFObject::observerNotify | |
static zfidentity | E_ThreadOnStart (void) |
see ZFObject::observerNotify | |
static zfidentity | E_ThreadOnStop (void) |
see ZFObject::observerNotify | |
static zfidentity | E_ThreadOnStopRequested (void) |
see ZFObject::observerNotify | |
static zfidentity | E_ThreadTaskQueueOnFinish (void) |
see ZFObject::observerNotify | |
static void * | nativeThreadRegister (const zfstring &threadName) |
register a thread which is not started by ZFThread, assert fail if already registered | |
static void | nativeThreadUnregister (void *token) |
see nativeThreadRegister | |
static zfbool | implAvailable () |
whether thread impl is available | |
static zfbool | implMainThreadTaskAvailable () |
whether mainThread's taskQueueAdd is available | |
static const ZFCoreArray< ZFThread * > & | allThread () |
access all thread, mainThread is not included | |
static ZFThread * | mainThread () |
return main thread | |
static ZFThread * | currentThread () |
return current thread, or zfnull if thread isn't started or registered by ZFThread or not registered by ZFThread::nativeThreadRegister | |
static zfbool | sleep (zftimet miliSecs) |
make current thread sleep for miliSecs, note this method may be not accurate | |
static ZFThread * | executeInThread (ZFThread *thread, const ZFListener &callback) |
util to run callback in specified thread, or run in mainThread if the thread is null or taskQueueAvailable is false | |
![]() | |
static const ZFClass * | ClassData (void) |
get class info | |
static zfidentity | E_ObjectBeforeAlloc (void) |
see ZFObject::observerNotify | |
static zfidentity | E_ObjectAfterAlloc (void) |
see ZFObject::observerNotify | |
static zfidentity | E_ObjectBeforeDealloc (void) |
see ZFObject::observerNotify | |
static zfidentity | E_ObjectPropertyValueOnUpdate (void) |
see ZFObject::observerNotify | |
static zfidentity | E_ObjectPropertyValueOnReset (void) |
see ZFObject::observerNotify | |
Protected Types | |
typedef ZFObject | zfsuper |
class ref to super | |
typedef ZFThread | zfself |
class ref to self | |
![]() | |
typedef _ZFP_Obj_Base | zfsuper |
class ref to super | |
typedef ZFObject | zfself |
class ref to self | |
Protected Member Functions | |
virtual void | objectOnInit (const ZFListener &runnable) |
init from listener | |
virtual void | objectOnInit (void) |
override this to init your object | |
virtual void | objectOnDealloc (void) |
override this to destroy your object | |
virtual void | objectOnDeallocPrepare (void) |
called before objectOnDealloc, safe to call virtual functions here | |
virtual void | objectInfoImplAppend (zfstring &ret) |
see objectInfo | |
virtual void | threadOnRun (const ZFArgs &zfargs) |
internal runnable, do nothing by default, you may override it | |
virtual void | threadOnRegister (void) |
see E_ThreadOnRegister | |
virtual void | threadOnUnregister (void) |
see E_ThreadOnUnregister | |
virtual void | threadOnStart (const ZFArgs &zfargs) |
see E_ThreadOnStart | |
virtual void | threadOnStop (const ZFArgs &zfargs) |
see E_ThreadOnStop | |
virtual void | threadOnStopRequested (void) |
see E_ThreadOnStopRequested | |
virtual void | threadTaskQueueOnFinish (void) |
see E_ThreadTaskQueueOnFinish | |
![]() | |
virtual void | objectInfoImpl (zfstring &ret) |
see objectInfo | |
virtual zfidentity | objectHashImpl (void) |
see objectHash | |
virtual ZFCompareResult | objectCompareImpl (ZFObject *anotherObj) |
see objectCompare | |
virtual ZFCompareResult | objectCompareValueImpl (ZFObject *anotherObj) |
see objectCompareValue | |
virtual void | observerOnAdd (zfidentity eventId) |
called when add first observer | |
virtual void | observerOnRemove (zfidentity eventId) |
called when remove last observer | |
virtual void | observerOnEvent (const ZFArgs &zfargs) |
notified when observerNotify | |
virtual void | objectOnInitFinish (void) |
called after objectOnInit, safe to call virtual functions here | |
virtual void | objectOnRetain (void) |
called to retain object | |
virtual void | objectOnRelease (void) |
called to release object | |
virtual void | objectPropertyValueOnUpdate (const ZFProperty *property, const void *oldValue) |
see E_ObjectPropertyValueOnUpdate | |
virtual void | objectPropertyValueOnReset (const ZFProperty *property) |
see E_ObjectPropertyValueOnReset | |
thread utility
you can use thread by one of these method:
for app level code, it's recommended to use zfasync since it may contain thread pool logic
|
inlinevirtual |
|
static |
called in the same thread of the thread task
|
static |
called in the same thread of the thread task
|
static |
called in the same thread of the thread task, param0 and param1 is the params passed from threadStart
|
static |
called in the same thread of the thread task, param0 and param1 is the params passed from threadStart
|
static |
called when threadStop called
|
static |
called when all of taskQueueCount finished
|
static |
register a thread which is not started by ZFThread, assert fail if already registered
return a token for nativeThreadUnregister to unregister
you must call nativeThreadUnregister before the thread ends
you must take good care when calling this method
main thread has no need to register
|
static |
it's safe to unregister in different thread using token
|
static |
access all thread, mainThread is not included
use with caution, use with ZFCoreMutexLock
make current thread sleep for miliSecs, note this method may be not accurate
return true if reached to specified time, or false if canceled by sleepCancel
|
static |
util to run callback in specified thread, or run in mainThread if the thread is null or taskQueueAvailable is false
return the actual thread that added the task, you may use taskQueueRemove to remove the task
|
protectedvirtual |
override this to init your object
subclass must call superclass's objectOnInit before any other code if override
you may also declare objectOnInit with params like this:
Reimplemented from ZFObject.
|
protectedvirtual |
override this to destroy your object
subclass must call superclass's objectOnDealloc after any other code if override
see objectOnInit for more info
Reimplemented from ZFObject.
|
protectedvirtual |
called before objectOnDealloc, safe to call virtual functions here
usually used to cleanup resources attached to this object other than self's internal resources
Reimplemented from ZFObject.
|
protectedvirtual |
see objectInfo
Reimplemented from ZFObject.
|
inlinevirtual |
the main callback to run
default is invalid callback, called after the builtin threadOnRun
you must make sure thread isn't running when setting new runnable
this value take effects only if you start thread by threadStart
|
virtual |
start thread, do nothing if already started
Reimplemented in ZFThreadMainThread.
|
virtual |
return true if start is called and hasn't been stopped or end
Reimplemented in ZFThreadMainThread.
|
virtual |
return true only if thread is running
Reimplemented in ZFThreadMainThread.
|
virtual |
request stop the thread, may not be stopped immediately
if thread is started but not running, this function will cancel the thread's run
otherwise, whether the thread is continue running or stopped, is up to the runnable
Reimplemented in ZFThreadMainThread.
|
virtual |
wait until thread finished running
return immediately if thread isn't running
note:
Reimplemented in ZFThreadMainThread.
wait until thread finished running, or timeout
return true immediately if thread isn't running, or false if wait timeout or error
Reimplemented in ZFThreadMainThread.
|
virtual |
return true if current thread is main thread
subclass should not override this method
Reimplemented in ZFThreadMainThread.
|
virtual |
add object to auto release pool attached to this thread
usually this method is called by zfautoRelease
|
virtual |
manually drain auto release pool
must ensure that all objects in pool are safe to release
called automatically after each time that runnable ends
|
virtual |
prepare a task queue that can be run in this thread
normally, thread would be terminated if threadRunnable finished
you may use this method to create a task queue loop, and use taskQueueAdd to run multiple task in this thread in order
once taskQueueInit called, the thread would never end even if all task finished, unless taskQueueCleanup called, this is useful to achieve custom message loop
mainThread is a special case since it already has builtin message loop, and the mainThread is always considered taskQueueInit has been called, the difference:
once taskQueueInit called, you may post runnable to be run in the specified thread by taskQueueAdd
|
protectedvirtual |
internal runnable, do nothing by default, you may override it
note: called before threadRunnable