Ожидание чтения и сокращение загрузки процессора. |
Здравствуйте, гость ( Вход | Регистрация )
Ожидание чтения и сокращение загрузки процессора. |
dasV |
13.3.2009, 17:47
Сообщение
#1
|
Студент Группа: Участник Сообщений: 19 Регистрация: 2.2.2009 Пользователь №: 522 Спасибо сказали: 0 раз(а) Репутация: 0 |
Добрый день уважаемые. Я новичок в qt да и в c++ поэтому бейте меня и посылайте на RTFM.
Есть Вот такой код
Так вот он создает нагрузку на процессор, а если ожидание затягивается, то и вовсе становится неприятно что я такой вот пожиратель тактов. Можно ли справить ситуацию?? Сразу оговорюсь что программа консольная и в ней нет Q_OBJECT с вызовом QTimer::timeout () Да еще вопрос, к месту ли тут QCoreApplication::processEvents()??? С уважением |
|
|
dasV |
27.3.2009, 19:45
Сообщение
#2
|
Студент Группа: Участник Сообщений: 19 Регистрация: 2.2.2009 Пользователь №: 522 Спасибо сказали: 0 раз(а) Репутация: 0 |
Всем спасибо за ответы.
Сделал socket.flush (); однако ничего не изменилось. Решил посмотреть состояние socket и выяснилось, что оно все время QAbstractSocket::ConnectedState то есть вроде как ошибок и нет, правда если после socket.write сделать socket.flush (); то состояние меняется на QAbstractSocket::UnconnectedState, вообще не понятно ничего =( Так же подумал, что мол не все прочитали и пишем, поэтому сделал так
в результате все нормально в начале было 308 байт стало 0. 2_LE0N сделал как и уважаемый просил QObject::connect(&socket, SIGNAL(sslErrors(QList<QSslError>)),this, SLOT(socketErrors(QList<QSslError>))); результат к сожалению тот же, слот не вызывается. Хотел бы спросить igor_bogomolov, скажите, вот сколько у нас байт на чтениемы, можем узнать, с помощью функции bytesAvailable а сколько должны (то есть сколько реально должны прочитать) можно ли узнать? То есть сервер нам говорит, я пришлю 500 байт, я вижу, что их 200 и не читаю, дожидаюсь следующей порции данных. Такое возможно? Насчет canReadLine то же понятНО тут придется писать while(socket.canReadLine()) который опять может привести к поеданию тактов от чего и уходили. Насчет отдельных QThread я понял, однако пока их не изучал и не лезу туда, но много видел советов использовать их в своих программах. Может еще что то придумать?? Спасибо. |
|
|
BRE |
27.3.2009, 20:27
Сообщение
#3
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Хотел бы спросить igor_bogomolov, скажите, вот сколько у нас байт на чтениемы, можем узнать, с помощью функции bytesAvailable а сколько должны (то есть сколько реально должны прочитать) можно ли узнать? То есть сервер нам говорит, я пришлю 500 байт, я вижу, что их 200 и не читаю, дожидаюсь следующей порции данных. Такое возможно? Насчет canReadLine то же понятНО тут придется писать while(socket.canReadLine()) который опять может привести к поеданию тактов от чего и уходили. Пускать while не надо. Смотри как будет происходить асинхронный обмен. Сервер говорит пришлю 500 байт, далее он начинает слать эти данные. Приходит первая порция данных (200 байт), вызывается слот readyRead, в нем ты вычитываешь 200 байт в буфер, понимаешь, что это не все данные и выходишь из слота, чуть позже приходят оставшиеся 300 байт, опять вызывается слот readyRead, в нем ты дочитываешь оставшиеся данные в тот же буфер, понимаешь что пришли все данные и обрабатываешь их (посылаешь сигнал что пакет с данными получен или переключаешь состояние на обработку этого пакета). |
|
|
Текстовая версия | Сейчас: 29.11.2024, 18:28 |