![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
gpepsi |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 73 Регистрация: 31.3.2010 Пользователь №: 1582 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Хочу реализовать наследника QIODevice. Посмотрел QLocalSocket, но что-то там слишком все мудро.
У меня устройство, с которым я могу работать через CreateFile, ReadFile, WriteFile. Для того, чтобы использовать waitForReadyRead - устройство открываю в асинхронном режиме. Переопределил методы
Теперь про
Я не хочу использовать буферизацию. Для них можно использовать GetOverlappedResult, но этот метод можно испозовать, только если операция ввода-вывода уже началась. Теперь ожидание
Для них нужно заводить 2 OVERLAPPED (на чтение и запись). Ожидать можно на WaitForSingleObject. Но эта функция тоже используется на начатой операции ввода-вывода. Как правильно написать код, чтоб можно было бы использовать типа
То есть операция ожидания раньше чем операция опроса состояния и операция чтения. З.Ы. Я тут подумал, если процесс записи примерно такой. write(...); waitForBytesWritten(...); bytesToWrite(...); то вроде все логично получается 1. запускаем операцию ввода-вывода 2. Ожидаем запись по таймауту 3. Проверяем сколько записали если необходимо А вот со чтением сложнее - сначала нужно узнать, что данные есть и сколько. А это получается нельзя сделать до запуска операции ввода-вывода Сообщение отредактировал gpepsi - 12.7.2012, 19:46 |
|
|
gpepsi |
![]()
Сообщение
#2
|
Студент ![]() Группа: Участник Сообщений: 73 Регистрация: 31.3.2010 Пользователь №: 1582 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
никто не далал чтоли ?
|
|
|
ViGOur |
![]()
Сообщение
#3
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
То что ты описал, будет работать только под виндой.
Я думаю, что раз ты хочешь асинхронности и пользуешься Qt, то используй механизм сигналов и слотов, который и так асинхронный. Для ожидания вызываешь: А уже в myReadyRead делаешь всё то, что хочешь делать при поступлении данных...И не нужно будет городить огород... Или я тебя не так понял? |
|
|
gpepsi |
![]()
Сообщение
#4
|
Студент ![]() Группа: Участник Сообщений: 73 Регистрация: 31.3.2010 Пользователь №: 1582 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Или я тебя не так понял? Или я тебя не так понял? ну хотелось бы этот объект использовать в отдельном потоке. Да и как ожидать данные, если чтения еще не началось. То есть логика как как я приводил
|
|
|
ViGOur |
![]()
Сообщение
#5
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
ну хотелось бы этот объект использовать в отдельном потоке. ты объект можешь создать в новом потоке и в нем же и обрабатывать сигналы и слоты.Да и как ожидать данные, если чтения еще не началось. Ожидание у тебя будет не явным, а средствами самого Qt, как только данные придут у тебя сработает слот, в котором ты можешь выполнить свои:
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 13.6.2025, 22:29 |