방법: 작업 큐 핸들 복제
예시
장기 실행 작업이 있는 경우 작업 기간 동안 작업 큐 핸들을 복제하려 할 수 있습니다. 이런 방법으로 XTaskQueueCloseHandle
을(를) 호출하면 큐가 필요한 동안에 큐를 닫지 않습니다. 이 방법은 다음 예제에서 확인할 수 있습니다.
void DuplicatingTaskQueueHandle()
{
XTaskQueueHandle queue;
HRESULT hr = XTaskQueueCreate(
XTaskQueueDispatchMode::Manual,
XTaskQueueDispatchMode::Manual,
&queue);
if (FAILED(hr))
{
printf("Failed to create task queue: 0x%x\r\n", hr);
return;
}
class LongRunningWork
{
public:
HRESULT Initialize(XTaskQueueHandle queue)
{
return XTaskQueueDuplicateHandle(queue, &m_queue);
}
~LongRunningWork()
{
if (m_queue != nullptr)
{
XTaskQueueCloseHandle(m_queue);
}
}
private:
XTaskQueueHandle m_queue = nullptr;
};
LongRunningWork work;
hr = work.Initialize(queue);
// Note that the queue handle for LongRunningWork is still valid.
XTaskQueueCloseHandle(queue);
if (FAILED(hr))
{
printf("Failed to duplicate queue handle: 0x%x\r\n", hr);
}
}