次の方法で共有


XTaskQueueDuplicateHandle

XTaskQueueHandle オブジェクトを複製します。

構文

HRESULT XTaskQueueDuplicateHandle(  
         XTaskQueueHandle queueHandle,  
         XTaskQueueHandle* duplicatedHandle  
)  

パラメーター

queueHandle _In_
型: XTaskQueueHandle

参照するキュー。

duplicatedHandle _Out_
型: XTaskQueueHandle*

複製されたキュー ハンドル。

戻り値

型: HRESULT

HRESULT 成功またはエラー コード。

解説

XTaskQueueHandle オブジェクトを閉じるには、XTaskQueueCloseHandle を使用します。

次の例では、タスク キュー ハンドルを複製する方法を示します。 実行時間の長い処理がある場合、その処理の間、タスク キュー ハンドルを複製したいことがあります。 これにより、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 LongRunningWork's queue handle is still valid.
    XTaskQueueCloseHandle(queue);

    if (FAILED(hr))
    {
        printf("Failed to duplicate queue handle: 0x%x\r\n", hr);
    }
}

要件

ヘッダー: XTaskQueue.h

ライブラリ: xgameruntime.lib

サポートされているプラットフォーム: Windows、Xbox One ファミリー本体、Xbox Series 本体

関連項目

XTaskQueue のメンバー
非同期プログラミング モデル
非同期タスク キューの設計