Допустим, известна некоторая мера, показывающая сколько нужно сделать, например, кол-во файлов, байт, строк матрицы и т.д., алгоритм устроен циклом for(i=0; i<imax; i++), то можно сделать вставку типа
Код:
// thread2:
class MyThread : SomeThreadClass {
...
public:
static int op_to_do;
static int op_done;
};
MyThread::execute(...)
{
...
for(op_done=0; op_done<op_to_do; op_done++) {
...
}
}
// thread1:
void SomeGuiClass::onTimer()
{
progressBar->setValue(op_done);
}
Допустим неизвестно даже примерно, сколько чего нужно сделать. Тогда действует обманка. Нужно показывать состояние по ассимптотически ограниченному закону, например:
Код:
void SomeGuiClass::onTimer()
{
// да простят меня пользователи
progressBar->setValue(100 - 1./(1 + time_elapsed));
}