XTaskQueueSubmitCallback
Submits a callback to the queue for the given port.
Syntax
HRESULT XTaskQueueSubmitCallback(
XTaskQueueHandle queue,
XTaskQueuePort port,
void* callbackContext,
XTaskQueueCallback* callback
)
Parameters
queue _In_
Type: XTaskQueueHandle
The queue to submit the callback to.
port _In_
Type: XTaskQueuePort
The port to submit the callback to. Callbacks can be assigned to work or completion ports.
callbackContext _In_opt_
Type: void*
An optional context pointer that will be passed to the callback.
callback _In_
Type: XTaskQueueCallback*
A pointer to the callback function.
Return value
Type: HRESULT
HRESULT success or error code.
Remarks
Performance Note:
Adding an item to a queue needs to be lock and wait free in order to satisfy the performance requirements of upstream code. The following APIs are lock free:
- XTaskQueueSubmitCallback
- XTaskQueueSubmitDelayedCallback
- XTaskQueueDispatch, provided that 0 is passed for timeoutInMs
The following example demonstrates how a callback is submitted to either the work or completion port of a task queue. It first submits a work callback, and then at the end of the work callback it submits a completion callback, which will be typical.
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);
}
}
Requirements
Header: XTaskQueue.h
Library: xgameruntime.lib
Supported platforms: Windows, Xbox One family consoles and Xbox Series consoles
See also
XTaskQueue members
Asynchronous Programming Model
Async Task Queue design