Я только недавно начал работать с API QThreads и столкнулся с нечетной проблемой.QThread блокирует цикл событий
Я создал подкласс QThread с Переопределённой Run() методом Здесь:
void ThreadChecker::run()
{
emit TotalDbSize(1000);
for (int i = 0; i < 1000; i++)
{
QString number;
number.setNum(i);
number.append("\n");
emit SimpleMessage(number);
//pausing is necessary, since in the real program the thread will perform quite lenghty tasks
usleep(10000);
}
}
Вот код, который вызывает эту тему:
ThreadChecker thread;
connect(&thread, SIGNAL(TotalDbSize(int)), this, SLOT(SetMaximumProgress(int)));
//This slot writes the message into the QTextEdit
connect(&thread, SIGNAL(SimpleMessage(QString)), this, SLOT(ProcessSimpleMessage(QString)));
thread.start();
Как я намереваюсь это работать для обновления QTextEdit каждые 10 миллисекунд. Но вместо этого программа просто отстает на 10 секунд, а затем все сигналы сразу бросаются. Moreso, в то время как программа отстает, она ведет себя так же, как цикл события заблокирован (кнопки не будут [ress, изменение размера не работает и т. Д.)
Что мне здесь не хватает?
попытайтесь добавить в свой 'ThreadChecker' ctor:' moveToThread (this) '. Обратите внимание, что это ** НЕ ** решение. Это просто проверить, помогает ли это, чтобы лучше понять вашу проблему. – ixSci
Если по ctor вы имеете в виду конструктор, то это не исправить вопрос – WereWind
Почему бы вам просто не использовать QTimer? – vahancho