Ожидание чтения и сокращение загрузки процессора. |
Здравствуйте, гость ( Вход | Регистрация )
Ожидание чтения и сокращение загрузки процессора. |
dasV |
13.3.2009, 22:16
Сообщение
#11
|
Студент Группа: Участник Сообщений: 19 Регистрация: 2.2.2009 Пользователь №: 522 Спасибо сказали: 0 раз(а) Репутация: 0 |
А я и не говорил что нельзя, мне просто неудобно, из за непонимания логики работы программы при использовании слотов.
Мне необходимо допустим три раза вызвать запись, три раза прочитать и при этом каждый раз я получаю разные данные, которые необходимо обработать разными методами. В результате я не понимаю, что мне надо делать в при вызове слота readyRead, откуда вызвано, куда что передавать,… понятно когда GUI приложение, жмякнул на кнпку (соединится) я соединился, жмякнул на кпопку (Послать) я и послал, жмякнул выход я рас соединился. А в консоли, что мне делать?? Я все и по порядку и делаю, при этом смысла в слотах я не вижу. 2_LE0N спасибо, буду думать.. 2_Litkevich Yuriy спасибо за замечание, буду отвыкать. С уважением |
|
|
kwisp |
13.3.2009, 22:27
Сообщение
#12
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
dasV,
с этого надо было начинать. давай задачу поконкретнее и все будет ок. в конце концов примеров куча. программа консольная и в ней нет Q_OBJECT я решил что кто то или что то ограничило пути решения. все таки в толк не возьму в чем разница консольное приложение или гуёвое в гуёвом понятно в консольном не понятно...как так? давай разбираться. |
|
|
Litkevich Yuriy |
13.3.2009, 22:32
Сообщение
#13
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
А в консоли, что мне делать?? Я все и по порядку и делаю, при этом смысла в слотах я не вижу. ну в консоли же не умерает объектно-ориентированное програмирование. У меня есть программа консольная которая опрашивает аппаратуру через COM-порт, сигналы и слоты мне очень помогли, без них было бы мение удобно работать.
|
|
|
dasV |
14.3.2009, 20:01
Сообщение
#14
|
Студент Группа: Участник Сообщений: 19 Регистрация: 2.2.2009 Пользователь №: 522 Спасибо сказали: 0 раз(а) Репутация: 0 |
Задача такова, я должен послать на сервер запрос авторизации, сервер мне ответит (тут я должен распарсить что он мне ответил) если это нормальный ответ, я посылаю запрос на выдачу мне нужной информации, при этом сервер мне отвечает xml строкой где я ищу нужные мне строки, вывожу на экран и опять посылаю запрос на закрытие соединения, опять ответ опять корректно закрыли или нет. Это простейший случай который реализован без Q_OBJECT шаг за шагом.
В результате я не могу понять ну вот я в конструкторе или в другом месте создал
В результате после соединения с хостом я вызову
А после будет получен сигнал readyRead() который вызовет слот socketReadyRead() в результате будет прочитана строка socket.readAll() “Я получаю ответ от сервера и допустим …ура!!! Все хорошо!!” а дальше что?? Как мне указать программе, что пора получать данные, после чего закрыть соединение?? Ну допустим я после чтения в функии socketReadyRead опять сделаю запрос socket.write(get.toUtf8()+ "\r\n"); Но после этого опять будет вызван socketReadyRead() и так по кругу… вот тут меня и клинит!!! Может книгу порекомендуете ?? С удовольствием почитаю =) С уважением |
|
|
kwisp |
14.3.2009, 20:27
Сообщение
#15
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
dasV,
существует такой метод или "агрегат" униерсальный для таих задач. называется машина состояний. есть состояния твоей проги. есть состояния сокета есть состояния данных и т.д и т.п.. состояния это обычно перечисляемый тип. и переменная в классе. в зависимости от действий в программе переключай состояния. при событиях проверяй в каком состоянии находишься и действуй. А после будет получен сигнал readyRead() который вызовет слот socketReadyRead() не пойму почему он вызовется. он вызывается не в тот момент когда сокет свободен а когда с другой стороны в него данные послали. |
|
|
dasV |
14.3.2009, 20:54
Сообщение
#16
|
Студент Группа: Участник Сообщений: 19 Регистрация: 2.2.2009 Пользователь №: 522 Спасибо сказали: 0 раз(а) Репутация: 0 |
2_ kwisp Спасибо, буду думать, а это не оно ли случаем?
http://ru.wikipedia.org/wiki/Автоматное_программирование Насчет, почему вызовется, потому как мы сделали socket.write при этом сервер нам будет возвращать данные, чего мы и ожидаем, ну по крайней мере в примерах именно так реализовано. |
|
|
kwisp |
15.3.2009, 9:16
Сообщение
#17
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
|
|
|
dasV |
26.3.2009, 19:33
Сообщение
#18
|
Студент Группа: Участник Сообщений: 19 Регистрация: 2.2.2009 Пользователь №: 522 Спасибо сказали: 0 раз(а) Репутация: 0 |
Доброго времени суток уважаемые.
Сделал как и сказано было, однако возникла проблема, если первый раз я произвожу запись из функции socketEncrypted() после чего читаю вполне нормально данные полученные от сервера, то второй раз, данные записать не удается. Точнее функция возвращает мне количество записанных данных, однако на деле ничего на сервер не приходит. Может кто то сталкивался с такой проблемой? Раскрывающийся текст
Заранее спасибо. |
|
|
igor_bogomolov |
26.3.2009, 23:51
Сообщение
#19
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Может я уже немного не в тему и не вовремя, но я бы использовал другую конструкцию. Предлогалось уже использовать сигналы и слоты, так и не понял почему этого не сделали. Я бы использовал следущую конструкцию:
Создал свой класс, наследник от QThread:
Переопредилил Run следущим образом:
SLOT. Чтение динных с сервера:
Надеюсь мысль понятна [offtop] Простите, но почему я не могу редактировать сообщения? И как сделать Раскрывающийся текст. А то я обрамил все в тег "Скрытый текст", думал что это оно, теперь и не знаю, читается ли код? [\offtop] |
|
|
igor_bogomolov |
27.3.2009, 0:44
Сообщение
#20
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
|
|
|
Текстовая версия | Сейчас: 29.11.2024, 17:43 |