MFAllocateSerialWorkQueue 函数 (mfapi.h)
创建保证序列化工作项的工作队列。 串行工作队列包装现有的多线程工作队列。 串行工作队列强制实施先入先出 (FIFO) 执行顺序。
语法
HRESULT MFAllocateSerialWorkQueue(
[in] DWORD dwWorkQueue,
[out] DWORD *pdwWorkQueue
);
parameters
[in] dwWorkQueue
现有工作队列的标识符。 这必须是多线程队列或另一个串行工作队列。 可以使用以下任一项:
- 默认工作队列 (MFASYNC_CALLBACK_QUEUE_STANDARD)
- 平台多线程队列 (MFASYNC_CALLBACK_QUEUE_MULTITHREADED)
- MFLockSharedWorkQueue 函数返回的多线程队列。
- 由 MFAllocateSerialWorkQueue 函数创建的串行队列。
[out] pdwWorkQueue
接收新串行工作队列的标识符。 在排队工作项时使用此标识符。
返回值
此函数可以返回其中一个值。
返回代码 | 说明 |
---|---|
|
函数成功。 |
|
应用程序超出了工作队列的最大数目。 |
|
应用程序未调用 MFStartup,或者应用程序已调用 MFShutdown。 |
注解
使用完工作队列后,调用 MFUnlockWorkQueue。
多线程队列使用线程池,这可以减少管道中的线程总数。 但是,它们不会序列化工作项。 串行工作队列使应用程序能够利用线程池的优势,而无需对其自己的工作项执行手动序列化。
回复模式
序列化程序队列也可以在“答复”模式下工作。 如果调用方的 IMFAsyncCallback::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 应用] |
目标平台 | Windows |
标头 | mfapi.h |
DLL | Mfplat.dll |