У меня есть интересная проблема для решения. Я использую Qt 5 для одного из моих проектов для чтения информации в сети. Я читаю устройства Modbus и прочее, но реальная проблема возникает, когда сеть недоступна.Qt Замораживание интерфейса на фоновой задаче
Интерфейс замерзает, и я не могу взаимодействовать с ним. Сетевые материалы выполняются в отдельном потоке, или это то, что я думаю. Вот некоторые пример кода:
class TwidoDevice : public QObject
{
Q_OBJECT
public:
explicit TwidoDevice
........ And some useful code
Использование (главный интерфейс) в классе Window.cpp
является:
L1Thread = new QThread();
L1Thread->start();
L1TWD = new TwidoDevice(L1TWD_settings,
L1TWD_Name,
PercentRegisters,
TotalsRegisters,
db, 1);
L1TWD->moveToThread(L1Thread);
connect(this, SIGNAL(startReading()), L1TWD, SLOT(startFired()), Qt::DirectConnection);
В этом коде startFired()
начать чтение устройств в сети.
В некоторой другой функции в Window.cpp
:
emit startReading()
Когда этот код выполняется интерфейс замерзает, даже если я переместил L1TWD
объект QThread
.
Когда я пытаюсь отладить его с помощью встроенного отладчика в QtCreator, я не могу понять, был ли объект перемещен или нет, и почему интерфейс был заморожен во время сетевого вызова.
Неужели кто-то столкнулся с одной и той же проблемой и как решить эту проблему?
Спасибо, что потратили время на чтение моего вопроса!
Вы пытались подключиться (это, SIGNAL (startReading()), L1TWD, SLOT (startFired())); '? Пожалуйста, используйте currentThread, чтобы распечатать это, чтобы убедиться, что вы правильно переехали. – lpapp