MCPcopy Create free account
hub / github.com/OpenNI/OpenNI / xnSchedulerAddTask

Function xnSchedulerAddTask

Source/OpenNI/XnScheduler.cpp:240–290  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

238}
239
240XN_C_API XnStatus xnSchedulerAddTask(XnScheduler* pScheduler, XnUInt64 nInterval, XnTaskCallbackFuncPtr pCallback, void* pCallbackArg, XnScheduledTask** ppTask)
241{
242 XnStatus nRetVal = XN_STATUS_OK;
243
244 XN_VALIDATE_INPUT_PTR(pScheduler);
245 XN_VALIDATE_INPUT_PTR(pCallback);
246 XN_VALIDATE_OUTPUT_PTR(ppTask);
247
248 // create node
249 XnScheduledTask* pTask;
250 XN_VALIDATE_ALLOC(pTask, XnScheduledTask);
251
252 pTask->nInterval = nInterval;
253 pTask->pCallback = pCallback;
254 pTask->pCallbackArg = pCallbackArg;
255
256 // calculate next execution
257 XnUInt64 nNow;
258 xnOSGetTimeStamp(&nNow);
259 pTask->nNextTime = nNow + nInterval;
260 pTask->pNextTask = NULL;
261
262 // enter critical section
263 nRetVal = xnOSEnterCriticalSection(&pScheduler->hCriticalSection);
264 if (nRetVal != XN_STATUS_OK)
265 {
266 xnOSFree(pTask);
267 return (nRetVal);
268 }
269
270 xnSchedulerAddTaskInternal(pScheduler, pTask);
271
272 // leave critical section
273 nRetVal = xnOSLeaveCriticalSection(&pScheduler->hCriticalSection);
274 if (nRetVal != XN_STATUS_OK)
275 {
276 xnOSFree(pTask);
277 return (nRetVal);
278 }
279
280 // notify that the list has changed
281 nRetVal = xnOSSetEvent(pScheduler->hWakeThreadEvent);
282 if (nRetVal != XN_STATUS_OK)
283 {
284 xnLogWarning(XN_MASK_SCHEDULER, "Failed setting event when adding task: %s", xnGetStatusString(nRetVal));
285 }
286
287 *ppTask = pTask;
288
289 return (XN_STATUS_OK);
290}
291
292void XnSchedulerRemoveTaskInternal(XnScheduler* pScheduler, XnScheduledTask* pTask)
293{

Callers

nothing calls this directly

Calls 7

xnGetStatusStringFunction · 0.85
xnOSGetTimeStampFunction · 0.50
xnOSEnterCriticalSectionFunction · 0.50
xnOSFreeFunction · 0.50
xnOSLeaveCriticalSectionFunction · 0.50
xnOSSetEventFunction · 0.50

Tested by

no test coverage detected