У меня есть простой вид пользовательского интерфейса, который имеет слот для кнопки, начиная нить:QThread блокировки основного приложения
void MainWindow::LoadImage()
{
aThread->run();
}
И бег() метод выглядит следующим образом:
void CameraThread::run()
{
qDebug("Staring Thread");
while(1)
{
qDebug("ping");
QThread::sleep(1);
}
}
When Я нажимаю кнопку, которая вызывает LoadImage(), пользовательский интерфейс становится невосприимчивым. Я периодически вижу сообщение «ping» в качестве отладочного вывода, но пользовательский интерфейс зависает, ни на что не реагирует. Почему мой поток не работает отдельно? CameraThread, полученный как открытый QThread Я использую gcc версии 4.4.3 (Ubuntu 4.4.3-4ubuntu5) с библиотеками QT и QT Creator из репозиториев Ubuntu 10.04 (x86).
Документация QT объясняет использование QThread путем подкласса. Почему это плохая идея? –
@Atilla - если вы читаете ссылку в блоге QT в ответе Кейси, вы найдете ее под названием «Вы делаете это неправильно ...». Это дискуссия о том, почему документация Qt о подклассификации QThread была неправильным способом создания потоков.Кроме того, если я правильно прочитал запись в блоге, это тот, кто написал оригинальную документацию Qt. –
Да, это правильно. В основном, документация Qt вводит в заблуждение и, следовательно, приводит многих людей к хакерским вещам (например, movetoThread (this) в конструкторе Qthread), которые вызывают проблемы в строке. Надеемся, что документы скоро будут обновлены. – Casey