IThread ( BREW Client 3.1 )
Edit by D.H.
IThread是基于BREW回调API的以线程协作为目的的线程接口。
IThread提供了开始、结束线程的方法,必要的阻塞方法。
IThread不能被重复使用,_Start()只能被调用一次,线程利用_Start()开始后,
被_Exit()或者_Stop()关闭后,就不能在re - _Start()了。
ITHREAD_Start()
原型
:
int ITHREAD_Start(IThread *p, int nStackSz,
PFNTHREAD pfStart, void *pvStart)
nStackSz:为IThread分配多少字节的堆栈。
pfStart:IThread的执行代码,类似java中,Thread.run()的内容。
pvStart:传递给pfStart的参数。
返回值:
SUCCESS
EALREADY:线程已经被启动了。 _Start()已经调用过了。
ENOMEMORY
备注:
nStackSz指定的大小,在保证pfStart(void*)函数和它子函数正常的前提下,尽可能的小。
ITHREAD_Stop() / ITHREAD_Exit()
原型:
int ITHREAD_Exit(IThread *p, int nRv)
nRv:线程的返回值。当通过_Join()注册的回调恢复时可能被使用。
返回值:
SUCCESS
EFAILED:线程尚未被启动。
EALREADY:线程已经被停止。
备注:
_Exit()方法在线程内外都可以被调用。如果在线程内被调用,它会停止线程并且不返回。
_Stop()方法将返回值设为-1。调用者不在意返回值时,它在线程外被调用。
副作用:
所有通过_Join()注册的回调都会被恢复。
ITHREAD_SUSPEND()
暂停程序的执行。这个方法实现阻塞。
原型:
void ITHREAD_Suspend(IThread *p)
备注:
该方法只能在线程内被调用。线程外调用的话,没有效果。
恢复线程的话,调用ISHELL_Resume(),传入线程的恢复AEECallback(_ResumeCBK())。
ITHREAD_Malloc()
分配内存,同时将内存块绑定线程的生命周期。
原型:
void *ITHREAD_Malloc(IThread *p, unsigned uSize);
返回值:
分配失败返回0
ITHREAD_Free()
释放由ITHREAD_Malloc()分配的内存。
ITHREAD_Join()
指定一个会在线程结束后执行的回调。ITHREAD_Exit()中的整型参数nRv就是传递给它的。
原型:
void ITHREAD_Join(IThread *p, AEECallback *pcb, int *pnRv)
ITHREAD_HoldRsc()
关联一个IBase*对象
原型:
int ITHREAD_HoldRsc(IThread *p, IBase *pResource);
备注:
这个关联行为不增加pResource的引用计数。
相应的使用ITHREAD_ReleaseRsc()是否关联。
ITHREAD_ReleaseRsc()
释放资源关联。
ITHREAD_GetResumeCBK()
返回一个初始化好的AEECallback,该对象用于恢复中断的线程。
原型:
AEECallback *ITHREAD_GetResumeCBK(IThread *p)
备注:
不要在对AEECallback执行CALLBACK_Init(),这样会中断线程。