如何:提交回调
示例
以下示例显示如何将回调提交到任务队列的工作端口或完成端口。 首先,它提交一个工作回调。 然后在工作回调结束时提交一个完成回调。 这是典型用法。 为简洁起见,在后续场景中使用 SubmitCallbacks
函数。
void CALLBACK SampleCompletionCallback(void*, bool cancel)
{
printf("Completion invoked on thread %d. Cancel? %d.\r\n",
GetCurrentThreadId(), cancel);
}
void CALLBACK SampleWorkCallback(void* context, bool cancel)
{
printf("Worker invoked on thread %d. Cancel? %d.\r\n",
GetCurrentThreadId(), cancel);
XTaskQueueHandle queueFromContext = static_cast<XTaskQueueHandle>(context);
HRESULT hrCompletion = XTaskQueueSubmitCallback(
queueFromContext,
XTaskQueuePort::Completion,
nullptr,
SampleCompletionCallback);
if (FAILED(hrCompletion))
{
printf("Error 0x%x submitting completion.\r\n", hrCompletion);
}
}
void SubmitCallbacks(XTaskQueueHandle queue)
{
HRESULT hrWork = XTaskQueueSubmitCallback(
queue,
XTaskQueuePort::Work,
queue,
SampleWorkCallback);
if (FAILED(hrWork))
{
printf("Error 0x%x submitting work.\r\n", hrWork);
}
}