1 #ifndef RHESUS_DO_ASYNC_STATIC_H_
2 #define RHESUS_DO_ASYNC_STATIC_H_
4 #include "RhesusTask.h"
12 typedef INT32 (*AsyncMethodFuncPtr)(UINT32 p0, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4, UINT32 p5,
13 UINT32 p6, UINT32 p7);
15 typedef void (*AsyncCallbackFuncPtr)(INT32 retCode);
20 static INT32 AsyncMethodWrapper(UINT32 p0, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4, UINT32 p5,
21 UINT32 p6, UINT32 p7, UINT32 p8)
23 do_async_static* instance =
reinterpret_cast<do_async_static*
>(p0);
25 if(instance->m_asyncFunc == NULL)
return -1;
27 INT32 ret = instance->m_asyncFunc(p1, p2, p3, p4, p5, p6, p7, p8);
29 if(instance->m_asyncCallback != NULL)
30 instance->m_asyncCallback(ret);
35 do_async_static(AsyncMethodFuncPtr asyncFunc, AsyncCallbackFuncPtr callback, UINT32 p0 = 0, UINT32 p1 = 0, UINT32 p2 = 0, UINT32 p3 = 0, UINT32 p4 = 0, UINT32 p5 = 0,
36 UINT32 p6 = 0, UINT32 p7 = 0)
37 : m_asyncTask(RhesusTask::CreateNew(
"Async Function", (FUNCPTR)AsyncMethodWrapper))
39 m_asyncTask.Start((UINT32)
this, p0, p1, p2, p3, p4, p5, p6, p7);
41 m_asyncFunc = asyncFunc;
42 m_asyncCallback = callback;
46 RhesusTask& m_asyncTask;
48 AsyncMethodFuncPtr m_asyncFunc;
49 AsyncCallbackFuncPtr m_asyncCallback;