Russian Qt Forum

Qt => Общие вопросы => Тема начата: Vamireh от Март 12, 2014, 22:06



Название: Слот отработал раньше сигнала. Причинно-следственные связи?
Отправлено: 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, то послать сигнал слоту, который сохранит данные.


Название: Re: Слот отработал раньше сигнала. Причинно-следственные связи?
Отправлено: Vamireh от Март 12, 2014, 22:07
на 10 миллисекунд, то есть


Название: Re: Слот отработал раньше сигнала. Причинно-следственные связи?
Отправлено: Swa от Март 12, 2014, 22:43
Вот вы звоните знакомому автомеханику и говорите, иногда я еду в машине и слышу звук такой "тыр-тыр-тыр" а потом "бум-бум", что у меня сломалось? Как вы думаете, что он вам ответит?
Гадать тут можно бесконечно.


Название: Re: Слот отработал раньше сигнала. Причинно-следственные связи?
Отправлено: Bepec от Март 12, 2014, 23:51
А ещё когда вы диплом защищаете, вы говорите "Ну я незнаю, я вот как то написал, но возможно наверно когда то ошибка разберитесь сами :D"

Больше фактов. И да, глюки бывают везде. У меня вон недавно условие value == -1 при value = 0  работало :D


Название: Re: Слот отработал раньше сигнала. Причинно-следственные связи?
Отправлено: Igors от Март 13, 2014, 11:19
Согласен с предыдущими докладчиками - вопрос задан совершенно безобразно.

Пока отработает слот проходит какое-то время и обычно сохраняет на 100мс больше чем надо.
Что имеется ввиду? finished посылается через QueuedConnection на слот в др нитке? Тогда вектор должен быть защищен напр мутексом.