Если у меня есть индикатор выполнения в потоке пользовательского интерфейса (окне), который будет работать бесконечно, пока метод не завершит свою работу, будет ли поток пользовательского интерфейса блокироваться, и поэтому индикатор выполнения, если я жду, пока завершится второй QThread?Если поток пользовательского интерфейса блокирует ожидание, то я бы не стал ждать второго потока.Я подумал реализовать метод обратного вызова, который будет вызываться после завершения второго потока, но затем: Как я могу подключиться к методу обратного вызова?
Что я хочу сделать?У меня есть окно, в этом окне есть индикатор выполнения, который сначала не виден.Когда пользователь нажимает определенную кнопку для запроса данных, вызывается метод, который возвращает RequestPointer, который содержит метод, который возвращает статус запроса.Когда пользователь нажимает кнопку, я хочу, чтобы индикатор выполнения отображался непрерывно до тех пор, пока запрос не будет завершен, и я смогу распечатать данные в окне.Работнику я хочу передать этот указатель, и работник проверяет цикл while (flag), если статус все еще работает, и спит, если так.Когда рабочий заканчивает, я хочу остановить индикатор выполнения и снова сделать его невидимым.Нужно ли передавать индикатор выполнения потоку, или я могу ждать потока, не блокируя пользовательский интерфейс?
Я не совсем профессионал в Qt.Действительно новый для этого.Я пытался получить некоторую информацию с веб-сайта https://doc.qt.io/Qt-5/qthread.html, но мне немного трудно понять пример кода.
Метод в моем рабочем классе:
void Worker::watchRequest(RequestPtr r_ptr)
{
bool exit = true;
while (!exit)
{
ErrorCode errorCode = r_ptr->Test();
switch (errorCode)
{
case Request_RUNNING:
QThread::msleep(10);
break;
case Request_ABORTED:
exit = true;
break;
case Request_SUCCESS:
exit = true;
break;
}
}