Я пытаюсь прочитать изображение, манипулировать данными о пикселях (гауссовскими или другими) и записать пиксели в новое изображение. Поскольку изображения имеют большие размеры (> 1 ГБ и даже могут быть> 20 ГБ), я читаю они по одной строке за раз со всей шириной. Так что это становится блочным чтением. Теперь моя работа требует более быстрого механизма для выполнения всего процесса. Будет пул потоков работать как эффективное решение. Я не могу использовать другие библиотеки для обработки изображений, у нас есть двигатель, созданный для этого.
Я сослался на образец примера пула потоков из проекта кода, и я читаю изображение в функции запуска потока, но я действительно не уверен, как он работает.
HRESULT hRes = m_ObjPool.Init(10, 100); //spawning the thread
void CThreadObject::Run(CThreadPoolThreadCallback &pool)
{
//I read and write my image here using for loop
for(int i=0;i<nImageHeight;++i)
{
for(int j=0;j<nImageWidth;j++)
{
Engine.ReadImage(params);
}
}
}
То, чего я пытался достичь, - это как задавать задачи для пула потоков, если изображение сегментировано на 10 или 100 частей (в зависимости от размера изображения и размера блока).