void WorkerThread::run()
{
while (!isInterruptionRequested())
{
while (hasSomethingToDo())
doWork();
Q_EMIT notingToDo();
while (!hasSomethingToDo() && !isInterruptionRequested())
sleep(1);
}
}
Внешний цикл крутится, пока кто-то не запросит interruption.
Пока есть чего делать, делаем doWork().
Как только работа закончилась, "пуляем" nothingToDo() и зависаем в "пустышке", пока снова работы не подвалит.
Чтоб ресурсы не жрались, делаем sleep/msleep (это важно, а то потог будет ждат около 10% проца впустую).