Название: Не заканчивается таймер Отправлено: blood_shadow от Май 11, 2011, 22:46 есть объект Pop3ConnectionObject который живет в другом потоке, и все его слоты выполняются
в том же потоке, создал таймер член данного класса: Код а также переопределил событие таймера: Код тоесть я с него сделал сингл-шот таймер далее в коде запускаю таймер: Код
Проблема в том что таймер не останавливается qDebug() << "Timer is active_1 -> " << timer.isActive(); выводит false, qDebug() << "Timer is active_2 -> " << timer.isActive(); выводит true, что вообще за хрень может быть? ??? Название: Re: Не заканчивается таймер Отправлено: merke от Май 12, 2011, 06:14 Опиши ка для чего тебе это? может есть другое решение...
Название: Re: Не заканчивается таймер Отправлено: blood_shadow от Май 12, 2011, 09:40 Опиши ка для чего тебе это? может есть другое решение... я хотел сделать попытка чтения с сервера большого файла(~20Мб), одним Код тут не обойтись, данные могут прийти после не выполнения условия цикла, алгоритм хочу реализовать такой: Код: while(!10 минут прошло) Название: Re: Не заканчивается таймер Отправлено: Пантер от Май 12, 2011, 09:45 bool QAbstractSocket::waitForReadyRead ( int msecs = 30000 )
Название: Re: Не заканчивается таймер Отправлено: blood_shadow от Май 12, 2011, 09:53 bool QAbstractSocket::waitForReadyRead ( int msecs = 30000 ) не подойдет, когда большой файл, сервер иногда шлет кусками, и получается считованиепроисходит быстрее чем новый кусок придет или например сервер послал кусок waitForReadyRead вернуло управление, потом секундный перебой в связи и мы как-бы все данные считали но это был только их кусок в любом случае надо гарантировано дать примерно 10 сек. ожидания Название: Re: Не заканчивается таймер Отправлено: Пантер от Май 12, 2011, 09:57 Что мешает по нормальному сделать, то есть реагировать на сигнал void readyRead ()?
Название: Re: Не заканчивается таймер Отправлено: blood_shadow от Май 12, 2011, 09:58 Что мешает по нормальному сделать, то есть реагировать на сигнал void readyRead ()? синхронный режим :)Название: Re: Не заканчивается таймер Отправлено: Пантер от Май 12, 2011, 10:00 while (true) {
.......... sleep (someTime); } Название: Re: Не заканчивается таймер Отправлено: blood_shadow от Май 12, 2011, 10:04 while (true) { сделал с помощью обычного таймера, но ща попробую разобраться с QBasicTimer, если это баг.......... sleep (someTime); } запостю на баг трекер Название: Re: Не заканчивается таймер Отправлено: Авварон от Май 12, 2011, 11:30 И вас там радостно пошлют:)
Название: Re: Не заканчивается таймер Отправлено: blood_shadow от Май 12, 2011, 12:39 нет там никакого бага, есть только моя невнимательность, вот рабочее решение:
Код и таймер ивент соответственно: Код
if (line == ".\r\n" && posLine == "\r\n") - условие передачи всего сообщения, пустая строка за которой идет . на линию Название: Re: Не заканчивается таймер Отправлено: Авварон от Май 12, 2011, 14:56 Бред. Почему нельзя циклом крутить waitForReadyRead пока не считаем все целиком?
Название: Re: Не заканчивается таймер Отправлено: blood_shadow от Май 12, 2011, 15:32 Бред. Почему нельзя циклом крутить waitForReadyRead пока не считаем все целиком? см. 3 пост, ситуация такова что данные могут не сразу прийти и при считывании мы можем достигнутьконца быстрее чем они появятся Название: Re: Не заканчивается таймер Отправлено: merke от Май 12, 2011, 16:49 Автор мудрите вы что то очень. пересмотрите решение.
А тема смешно звучит, как будто длииииный таймер такой и всё и не заканчивается и не заканчивается=) Название: Re: Не заканчивается таймер Отправлено: blood_shadow от Май 12, 2011, 17:23 Автор мудрите вы что то очень. пересмотрите решение. я пробовал сначала сделать в цикле waitForReadyRead() но по истечению не которого времени,А тема смешно звучит, как будто длииииный таймер такой и всё и не заканчивается и не заканчивается=) ф-ция возращает false даже если есть данные в сокете, увы это баг - http://bugreports.qt.nokia.com/browse/QTBUG-14975 Название: Re: Не заканчивается таймер Отправлено: Авварон от Май 12, 2011, 23:41 У вас есть ЯВНОЕ уловие выхода:
if (line == ".\r\n" && posLine == "\r\n") Пока оно не выполнено - читать циклом несмотря на то что возвращает вейт фор реди рид. Название: Re: Не заканчивается таймер Отправлено: blood_shadow от Май 12, 2011, 23:49 Пока оно не выполнено - читать циклом несмотря на то что возвращает вейт фор реди рид. это все понятно, но что делать если сервер связь отрубил во время передачи или пользователь захотелвырубить программу? код то синхронный никакого сигнал - слот отношения нету или еще одна ситуация куда хуже - сервер вовсе не отвечает или при медленном соединении будет 20 мб полчаса передавать Название: Re: Не заканчивается таймер Отправлено: blood_shadow от Май 12, 2011, 23:56 а вот такой еще вопрос - можно ли как-то создать таймер который будет обходить
Qt-очередь событий, смотрел таймеры с винапи, но они принимают хендл окна, как с ними напрямую связаться минуя очередь? то есть мне нужен такой алгоритм: запустил таймер на 10сек, который работает независимо от обработки событий Qt и после 10 сек он сам остановится без processEvents() Название: Re: Не заканчивается таймер Отправлено: Авварон от Май 13, 2011, 00:17 Нет. Я вообще не понимаю что у вас там за жесть такая. Если сервер не ответил за время, указанное в waitForBytesWritten, надо спросить юзера - ретрай? Что ф-ия возвращает false это не косяк
|