Russian Qt Forum
Май 04, 2024, 12:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 64 65 [66] 67 68 ... 88   Вниз
  Печать  
Автор Тема: Создаю библиотеку для работы с последовательными портами. [УШЕЛ ИЗ ПРОЕКТА].  (Прочитано 752752 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #975 : Август 06, 2012, 10:06 »

Хорошо, попробуй тогда (если есть время), проверить реализацию с новой концепцией отсюда:

https://codereview.qt-project.org/#change,32186

т.к. грядет полная переделка внутренней структуры.
Записан

ArchLinux x86_64 / Win10 64 bit
b-s-a
Гость
« Ответ #976 : Август 06, 2012, 13:03 »

Сделал, не помогло.
Ты пробовал делать moveToThread для порта?
Записан
Phoenix
Гость
« Ответ #977 : Август 06, 2012, 13:23 »

Цитировать
Хорошо, попробуй тогда (если есть время), проверить реализацию с новой концепцией отсюда:
Вечером попробую.

Цитировать
Ты пробовал делать moveToThread для порта?
Для версии waitFor* пробовал. Всеравно падает. Еще в этой версии моей программы в потоке нет цикла обработки событий, но данные приходят. Такое ощущение, что события порта всегда обрабатываются главным потоком (даже если объект порта работает не в главном потоке). Или они все же обрабатываются в waitFor* хз.
Проверял даже вызовом thread() к какому потоку какой объект принадлежит. Проверял это для версии с  waitFor* и с сигналами/слотами.

Как я уже писал выше, в QSerialDevice 2.0 я вместо waitForBytesWritten применял msleep и работало. Что-то серьезное менялось при переходе от QSerialDevice  к QtSerialPort? Еще возможно что я ОС обновил, но не обратил внимание когда сегфолты начались. Но ОС работает стабильно, иногда несколько суток не выключаю.
« Последнее редактирование: Август 06, 2012, 13:44 от Phoenix » Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #978 : Август 06, 2012, 15:07 »

Цитировать
Что-то серьезное менялось при переходе от QSerialDevice  к QtSerialPort?

нет
Записан

ArchLinux x86_64 / Win10 64 bit
Phoenix
Гость
« Ответ #979 : Август 06, 2012, 21:05 »

С новой библиотекой поток+waitFor* работает и не глючит. Проверял час, думаю на ночь оставить. Но при запуске выдает:
Код:
Warning: QObject: Cannot create children for a parent that is in a different thread.
(Parent is SerialPort(0x7fff19085ab8), parent's thread is QThread(0x22d3f00), current thread is port(0x7fff19085aa0)
Warning: QObject: Cannot create children for a parent that is in a different thread.
(Parent is SerialPort(0x7fff19085ab8), parent's thread is QThread(0x22d3f00), current thread is port(0x7fff19085aa0)
Видимо нужно SerialPort переместить в мой поток, сейчас он в главном потоке.
А вот с сигналами что-то не работает. Не генерируется сигнал readyRead(). Еще не разобрался.
« Последнее редактирование: Август 06, 2012, 21:08 от Phoenix » Записан
Bepec
Гость
« Ответ #980 : Август 06, 2012, 21:10 »

Помоему тут налицо просто неумение работы с потоками Улыбающийся Но да пусть. Набирайся опыта.

Записан
Phoenix
Гость
« Ответ #981 : Август 06, 2012, 21:31 »

Это потому что спросить не у кого. Нет знакомых программистов. Для меня это хобби.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #982 : Август 06, 2012, 22:22 »

Цитировать
А вот с сигналами что-то не работает. Не генерируется сигнал readyRead(). Еще не разобрался.
Да, это возможно, т.к. waitForXXX еще вообще не обкатывалось. Упор делался на использование сигналов.
Сейчас там в Gerrit страсти устаканятся и начнем обкатывать и внедрять эту новую внутреннюю структуру.
Записан

ArchLinux x86_64 / Win10 64 bit
Phoenix
Гость
« Ответ #983 : Август 06, 2012, 22:27 »

kuzulis, ты меня не понял, у меня waitForXXX работает, а сигналы нет.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #984 : Август 06, 2012, 22:33 »

Я тебя понял, но Не может такого быть. Вполне возможно что они не работают потому, что ты их используешь совместно с waitForXXX.

Если использовать чисто сигналы - то оно работает. Я ж проверял.  Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
Phoenix
Гость
« Ответ #985 : Август 06, 2012, 22:50 »

У меня три варианта программы:
1. поток +  waitForXXX
2. сигналы/слоты
3. поток + сигналы/слоты
Первый работает, а остальные нет. Со вчерашнего дня я их не менял. Просто либу пересобрал. Возможно я где-то накосячил, сейчас разбираюь. Забыл сказать что у меня Linux х86-64. Может это тоже имеет значение.
Записан
Phoenix
Гость
« Ответ #986 : Август 07, 2012, 06:08 »

Первый вариант работал 6 часов и не повис.
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #987 : Август 17, 2012, 22:01 »

Господа, а можно ли как-то приладить эту либу для чтения из пайпа (stdin)? Или может какая-нибудь внутренность подойдет?
Записан

Гугль в помощь
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #988 : Август 17, 2012, 23:08 »

Для пайпов возьми из Qt5 QPipeReader/Writer
Записан

ArchLinux x86_64 / Win10 64 bit
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #989 : Август 18, 2012, 21:13 »

Для пайпов возьми из Qt5 QPipeReader/Writer
Что за зверь, почему гуголь о нём не знает? )

Впрочем, я уже обошёлся включением O_NONBLOCK на дескрипторе и использованием QSocketNotifier... Только под винду это работать не будет, но сейчас для меня это не критично.

Подожду релиза Qt5 тогда поубираю свои костыли.
Записан

Гугль в помощь
Страниц: 1 ... 64 65 [66] 67 68 ... 88   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 23.