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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Слот отработал раньше сигнала. Причинно-следственные связи?  (Прочитано 2749 раз)
Vamireh
Гость
« : Март 12, 2014, 22:06 »

Снимаю данные с ком порта, как только накопилось нужное количество, высылается сигнал, что типа "все, хватит":
Код:
if (QVector::size() == need)
emit finished();

Этот сигнал соединен со слотом, который выключает устройство и сохраняет данные в файл. Пока отработает слот проходит какое-то время и обычно сохраняет на 100мс больше чем надо. Но, просматривая снятые файлы, случайно обнаружил, что в одном файле не хватает 100мс (одного пакета данных или одного элемента того QVector).

Вот просто интересно, как это могло произойти? Проверка размера QVector - единственное место, где этот сигнал мог быть выслан и это единственное условие, т.е. QVector::size() все таки вернул need и сигнал выслан был. Просмотрел кучу файлов с парой сотен часов съема - только в одном файле такая штука.

Или другой вариант: сохраняю в файл через qCompress, может тут что-то случилось...

Сейчас весь съем данных идет с параллельно работающим PortMon, но сомневаюсь, что это повторится. Рабочая версия программы не менялась. Логов и всего остального - разумеется нет.

Я, конечно, сомневаюсь что поймал страшный баг Windows/Qt/zlib, но и у себя проблем не вижу. Код приводить не вижу смысла, его там много и местами "для служебного пользования", логика тупа:  если QVector::size() возвратил need, то послать сигнал слоту, который сохранит данные.
Записан
Vamireh
Гость
« Ответ #1 : Март 12, 2014, 22:07 »

на 10 миллисекунд, то есть
Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #2 : Март 12, 2014, 22:43 »

Вот вы звоните знакомому автомеханику и говорите, иногда я еду в машине и слышу звук такой "тыр-тыр-тыр" а потом "бум-бум", что у меня сломалось? Как вы думаете, что он вам ответит?
Гадать тут можно бесконечно.
Записан
Bepec
Гость
« Ответ #3 : Март 12, 2014, 23:51 »

А ещё когда вы диплом защищаете, вы говорите "Ну я незнаю, я вот как то написал, но возможно наверно когда то ошибка разберитесь сами Веселый"

Больше фактов. И да, глюки бывают везде. У меня вон недавно условие value == -1 при value = 0  работало Веселый
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Март 13, 2014, 11:19 »

Согласен с предыдущими докладчиками - вопрос задан совершенно безобразно.

Пока отработает слот проходит какое-то время и обычно сохраняет на 100мс больше чем надо.
Что имеется ввиду? finished посылается через QueuedConnection на слот в др нитке? Тогда вектор должен быть защищен напр мутексом.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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