방법: 콜백 제출
예시
다음 예시에서는 작업 큐의 작업 포트 또는 완료 포트에 콜백을 전송하는 방법을 보여줍니다. 먼저, 작업 콜백을 제출합니다. 그 다음에 작업 콜백이 끝나면 완료 콜백을 제출합니다. 이는 일반적인 사용 방법입니다.
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);
}
}