Название: Помогите разобраться Отправлено: Child от Февраль 09, 2018, 14:29 Доброго времени суток!!! Мне нужно чтобы на время выполнения запроса отображалось время выполнения этого запроса в секундах.
Делаю так Код
Если запустить этот код без выполнения запроса, то все отсчитывается ... а если одновременно с выполнением запроса, то ничего не происходит. Может кто подскажет что можно сделать. Название: Re: Помогите разобраться Отправлено: Apktyc от Февраль 09, 2018, 15:27 Есть предположение, что в процессе обработки запроса не плохо было бы вызывать QApplication::processEvents() (http://doc.qt.io/qt-5/qcoreapplication.html#processEvents), либо выполнять запрос вне интерфейсного потока.
Название: Re: Помогите разобраться Отправлено: Child от Февраль 09, 2018, 15:43 qApp -> processEvent() я ставлю после выполнения timer->start(1000); ... но не помогает
Запрос отрабатывает больше минуты и вот сигнал timeout() начинает срабатывать сразу после выполнения запроса Название: Re: Помогите разобраться Отправлено: PimenS от Февраль 09, 2018, 16:24 Как вариант, запрос в отдельном потоке.
Название: Re: Помогите разобраться Отправлено: qate от Февраль 09, 2018, 16:27 запрос (к БД?) выполняется в томже потоке что и таймер - никак не получится одновременно
выноси запросы в отдельный поток Название: Re: Помогите разобраться Отправлено: Igors от Февраль 10, 2018, 07:37 запрос (к БД?) выполняется в томже потоке что и таймер - никак не получится одновременно Тогда как отображать истекшее время из "не главной" нитки?выноси запросы в отдельный поток Название: Re: Помогите разобраться Отправлено: Child от Февраль 10, 2018, 09:26 Да, запрос к БД. Никогда не приходилось работать с потоками. Может кто-нибудь покажет пример как запустить выполнение запроса из другого потока. Это нужно отдельный класс создавать? Или все в одном классе можно сделать?
Название: Re: Помогите разобраться Отправлено: PimenS от Февраль 10, 2018, 20:15 Простенький пример как использовать отдельный поток. В run() описываешь свой запрос.
Название: Re: Помогите разобраться Отправлено: Child от Февраль 12, 2018, 08:49 спасибо большое!!! Буду разбираться
Название: Re: Помогите разобраться Отправлено: qate от Февраль 12, 2018, 09:06 запрос (к БД?) выполняется в томже потоке что и таймер - никак не получится одновременно Тогда как отображать истекшее время из "не главной" нитки?выноси запросы в отдельный поток главная нить запускает и "тикает" время Название: Re: Помогите разобраться Отправлено: Child от Февраль 15, 2018, 11:10 PimenS, спасибо большое за пример!!! Все получилось :)
Только вот есть еще такой вопрос, как обрабатывать ошибки, почему-то если я пытаюсь в потоке выводить сообщение при ошибке выполнения запроса, то вылезают следующие ошибки QObject::startTimer: timers cannot be started from another thread QApplication: Object event filter cannot be in a different thread. Можно ли вообще вызывать сообщения в потоке ??? Название: Re: Помогите разобраться Отправлено: Child от Февраль 15, 2018, 12:28 пока проблема решилась таким образом ... при ошибке поток высылает сигнал основному приложению с текстом ошибки и это основное приложение выводит ошибку.
Только насколько это правильно ?? Название: Re: Помогите разобраться Отправлено: PimenS от Февраль 15, 2018, 22:42 пока проблема решилась таким образом ... при ошибке поток высылает сигнал основному приложению с текстом ошибки и это основное приложение выводит ошибку. Только насколько это правильно ?? Так и должно быть. |