Интерфейс 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.