Обычно делают такие оптимизации:
- зовут на каждую N-ую итерацию:
C++ (Qt)
if (i % 10) progress->setValue(i);
- или по времени:
C++ (Qt)
QTime t;
t.start();
for (int i = 0; i < 10000; i++)
{
if (t.elapsed() > 50)
{
t.start();
progress->setValue(i);
}
some_work();
}