IThreadPoolConfig 接口
此接口提供用于配置线程池的方法。
重要
无法在 Windows 运行时中执行的应用程序中使用此类及其成员。
语法
__interface
__declspec(uuid("B1F64757-6E88-4fa2-8886-7848B0D7E660")) IThreadPoolConfig : public IUnknown
成员
方法
名称 | 描述 |
---|---|
GetSize | 调用此方法可获取池中的线程数。 |
GetTimeout | 调用此方法可获取线程池等待线程关闭的最长时间(以毫秒为单位)。 |
SetSize | 调用此方法可设置池中的线程数。 |
SetTimeout | 调用此方法可设置线程池等待线程关闭的最长时间(以毫秒为单位)。 |
备注
此接口由 CThreadPool 实现。
要求
标头:atlutil.h
IThreadPoolConfig::GetSize
调用此方法可获取池中的线程数。
STDMETHOD(GetSize)(int* pnNumThreads);
参数
pnNumThreads
[out] 成功时接收池中线程数的变量的地址。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
示例
HRESULT DoPoolOperations(IThreadPoolConfig* pPool, int nSize)
{
int nCurrSize = 0;
HRESULT hr = pPool->GetSize(&nCurrSize);
if (SUCCEEDED(hr))
{
printf_s("Current pool size: %d\n", nCurrSize);
hr = pPool->SetSize(nSize);
if (SUCCEEDED(hr))
{
printf_s("New pool size : %d\n", nSize);
DWORD dwTimeout = 0;
hr = pPool->GetTimeout(&dwTimeout);
if (SUCCEEDED(hr))
{
printf_s("Current pool timeout: %u\n", dwTimeout);
// Increase timeout by 10 seconds.
dwTimeout += 10 * 1000;
hr = pPool->SetTimeout(dwTimeout);
if (SUCCEEDED(hr))
{
printf_s("New pool timeout: %u\n", dwTimeout);
}
else
{
printf_s("Failed to set pool timeout: 0x%08X\n", hr);
}
}
else
{
printf_s("Failed to get pool timeout: 0x%08X\n", hr);
}
}
else
{
printf_s("Failed to resize pool: 0x%08X\n", hr);
}
}
else
{
printf_s("Failed to get pool size: 0x%08x\n", hr);
}
return hr;
}
IThreadPoolConfig::GetTimeout
调用此方法可获取线程池等待线程关闭的最长时间(以毫秒为单位)。
STDMETHOD(GetTimeout)(DWORD* pdwMaxWait);
参数
pdwMaxWait
[out] 成功时接收线程池等待线程关闭的最长时间(以毫秒为单位)的变量的地址。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
示例
请参阅 IThreadPoolConfig::GetSize。
IThreadPoolConfig::SetSize
调用此方法可设置池中的线程数。
STDMETHOD(SetSize)int nNumThreads);
参数
nNumThreads
池中请求的线程数。
如果 nNumThreads 为负数,则将其绝对值乘以机器中的处理器数即可得到总线程数。
如果 nNumThreads 为零,则 ATLS_DEFAULT_THREADSPERPROC 乘以机器中的处理器数即可获得线程总数。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
示例
请参阅 IThreadPoolConfig::GetSize。
IThreadPoolConfig::SetTimeout
调用此方法可设置线程池等待线程关闭的最长时间(以毫秒为单位)。
STDMETHOD(SetTimeout)(DWORD dwMaxWait);
参数
dwMaxWait
线程池将等待线程关闭的请求最长时间(以毫秒为单位)。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
示例
请参阅 IThreadPoolConfig::GetSize。