다음을 통해 공유


방법: 작업 큐 대기자 사용

예제

작업 큐에 Win32 커널 핸들을 등록할 수 있습니다. 핸들이 신호를 받으면 콜백이 큐에 제출됩니다. 일반적으로 신호 전달에 사용할 자동 다시 설정 이벤트를 만듭니다. 핸들이 자동으로 다시 설정되지 않는 경우 핸들이 신호를 받는 한, 현재 콜백이 완료되면 새 콜백이 제출됩니다.

다음 예제에서는 작업 큐 대기자를 사용하는 방법을 보여 줍니다.

void CreatingTaskQueueWaiter()  
{  
    HANDLE waitEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);  
    if (waitEvent == nullptr)  
    {  
        printf("Error creating wait handle: %d\r\n", GetLastError());  
        return;  
    }  
  
    XTaskQueueHandle queue;  
  
    HRESULT hr = XTaskQueueCreate(  
        XTaskQueueDispatchMode::ThreadPool,  
        XTaskQueueDispatchMode::ThreadPool,  
        &queue);  
  
    if (FAILED(hr))  
    {  
        printf("Error creating task queue: %x\n", hr);  
        CloseHandle(waitEvent);  
        return;  
    }  
  
    auto callback = [](void*, bool)  
    {  
        printf("Callback invoked.\r\n");  
    };  
  
    XTaskQueueRegistrationToken token;  
  
    hr = XTaskQueueRegisterWaiter(  
        queue,  
        XTaskQueuePort::Completion,  
        waitEvent,  
        nullptr,  
        callback,  
        &token);  
  
    if (FAILED(hr))  
    {  
        printf("Error registering task queue waiter: %x\n", hr);  
        CloseHandle(waitEvent);  
        XTaskQueueCloseHandle(queue);  
        return;  
    }  
  
    // Now, whenever our wait event becomes signaled, the callback will be called.  
    for (uint32_t i = 0; i < 5; i++)  
    {  
        SetEvent(waitEvent);  
        Sleep(100);  
    }  
  
    // Note: Unregistering the waiter is optional.  
    XTaskQueueUnregisterWaiter(queue, token);  
    XTaskQueueCloseHandle(queue);  
    CloseHandle(waitEvent);  
}  

샘플 출력

Callback invoked.  
Callback invoked.  
Callback invoked.  
Callback invoked.  
Callback invoked.  

참고 항목

작업 큐 디자인