Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Создает рабочую очередь, которая гарантирует сериализацию рабочих элементов. В очереди последовательной работы выполняется оболочка существующей многопоточной рабочей очереди. В очереди последовательной работы применяется порядок выполнения в первую очередь (FIFO).
Синтаксис
HRESULT MFAllocateSerialWorkQueue(
[in] DWORD dwWorkQueue,
[out] DWORD *pdwWorkQueue
);
Параметры
[in] dwWorkQueue
Идентификатор существующей рабочей очереди. Это должна быть многопоточная очередь или другая последовательная рабочая очередь. Можно использовать любой из следующих элементов:
- Рабочая очередь по умолчанию (MFASYNC_CALLBACK_QUEUE_STANDARD)
- Многопоточной очереди платформы (MFASYNC_CALLBACK_QUEUE_MULTITHREADED)
- Многопоточной очереди, возвращаемой функцией MFLockSharedWorkQueue .
- Последовательная очередь, созданная функцией MFAllocateSerialWorkQueue .
[out] pdwWorkQueue
Получает идентификатор новой последовательной рабочей очереди. Используйте этот идентификатор при очереди рабочих элементов.
Возвращаемое значение
Эта функция может возвращать одно из этих значений.
| Код возврата | Description |
|---|---|
|
Функция завершилась успешно. |
|
Приложение превысило максимальное количество рабочих очередей. |
|
Приложение не вызывало MFStartup или приложение уже назвало MFShutdown. |
Замечания
После завершения работы с рабочей очередью вызовите MFUnlockWorkQueue.
Многопоточные очереди используют пул потоков, который может уменьшить общее количество потоков в конвейере. Однако они не сериализуют рабочие элементы. Очередь последовательной работы позволяет приложению получить преимущества пула потоков без необходимости выполнять сериализацию собственных рабочих элементов вручную.
Режим ответа
Очередь сериализатора также может работать в режиме ответа. Если метод МВФAsyncCallback метода вызывающего объекта::GetParameters возвращает флаг MFASYNC_REPLY_CALLBACK , очередь сериализатора не автоматически переходит к следующему рабочему элементу. Вместо этого очередь ожидает ответа от вызывающего абонента. Вызывающий объект сигнализирует ответу, вызывая асинхронный объект результата, который рабочая очередь передает методу Invoke . В следующем коде показано, как вызывающий сигнал сигнализирует рабочей очереди.HRESULT CCallback::Invoke(IMFAsyncResult *pResult)
{
DoSomeWork();
// Reply to the work queue that you are done.
MFInvokeCallback(pResult);
// Note: This call to MFInvokeCallback does not have to occur inside the
// Invoke method. You could call MFInvokeCallback at a later time.
return S_OK;
}
HRESULT CCallback::GetParameters(DWORD *pdwFlags, DWORD *pdwQueue)
{
*pdwFlags = MFASYNC_REPLY_CALLBACK;
*pdwQueue = m_QueueId;
return S_OK;
}
Требования
| Требование | Ценность |
|---|---|
| Минимальный поддерживаемый клиент | Windows 8 [классические приложения | Приложения UWP] |
| минимальный поддерживаемый сервер | Windows Server 2012 [классические приложения | Приложения UWP] |
| целевая платформа | Виндоус |
| Header | mfapi.h |
| Library | Mfplat.lib |
| DLL | Mfplat.dll |