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