1 #ifndef RHESUS_DO_ASYNC_H_
2 #define RHESUS_DO_ASYNC_H_
13 template<
typename AsyncMethodClassPtr,
typename AsyncMethodFuncPtr,
14 typename AsyncCallbackClassPtr = AsyncMethodClassPtr,
15 typename AsyncCallbackFuncPtr = AsyncMethodFuncPtr>
19 AsyncMethodClassPtr ptr;
20 AsyncMethodFuncPtr mptr;
21 AsyncCallbackFuncPtr cptr;
22 AsyncCallbackClassPtr ccptr;
34 return (ptr->*mptr)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
37 INT32 callCallback(INT32 retCode)
39 return (ccptr->*cptr)(retCode);
44 static INT32 AsyncMethodWrapper(TaskStruct* t) {
54 INT32 retCode = t->callMethod();
57 if (t->ccptr != NULL &&t->cptr != NULL)
58 t->callCallback(retCode);
65 do_async(AsyncMethodClassPtr inst, AsyncMethodFuncPtr asyncFunc,
66 UINT32 p0 = 0, UINT32 p1 = 0, UINT32 p2 = 0, UINT32 p3 = 0,
67 UINT32 p4 = 0, UINT32 p5 = 0, UINT32 p6 = 0, UINT32 p7 = 0)
70 TaskStruct* t = create(inst, asyncFunc, NULL, NULL, p0, p1, p2,p3, p4, p5, p6, p7);
71 TaskPool::EnqueueTask((FUNCPTR) AsyncMethodWrapper, (UINT32)t);
75 do_async(AsyncMethodClassPtr inst, AsyncMethodFuncPtr asyncFunc,
76 AsyncMethodClassPtr c_inst, AsyncCallbackFuncPtr callback,
77 UINT32 p0 = 0, UINT32 p1 = 0, UINT32 p2 = 0, UINT32 p3 = 0,
78 UINT32 p4 = 0, UINT32 p5 = 0, UINT32 p6 = 0, UINT32 p7 = 0)
81 TaskStruct* t = create(inst, asyncFunc, callback, c_inst, p0, p1, p2,p3, p4, p5, p6, p7);
82 TaskPool::EnqueueTask((FUNCPTR) AsyncMethodWrapper, (UINT32)t);
88 TaskStruct* create(AsyncMethodClassPtr ptr, AsyncMethodFuncPtr mptr,
89 AsyncCallbackFuncPtr cptr, AsyncCallbackClassPtr ccptr, UINT32 arg0, UINT32 arg1, UINT32 arg2,
90 UINT32 arg3, UINT32 arg4, UINT32 arg5, UINT32 arg6, UINT32 arg7)
92 TaskStruct* t =
new TaskStruct();