Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


e14-140 builder c++, принятие данных

Вы не вошли.

 Поиск | Регистрация | Вход 

МОТ
25.10.2011 13:30:35
#1

Гость

e14-140 builder c++, принятие данных

заметил одну вещь интересную.
Данные с ацп принимаю в потоке.
дык вот STOP_ADC делаю как советует руководство.
Но вот интересный факт. КОгда например нажимаю на заголовок GUI программы и дергаю его не отпуская мышки, каналы могут сбиваться(меняются местами).

МОТ
25.10.2011 16:10:53
#2

Гость

Re: e14-140 builder c++, принятие данных

хотя это может возникать из за того что я в отладчике запускаю. Отладчик может такие вещи вытворять? портить нормальный ход потока

15.11.2011 10:13:13
#3

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: e14-140 builder c++, принятие данных

Как мы с Вами уже обсуждали в другой ветке, видимая перемена мест каналов при отображении означает, что программа пропустила как минимум один кусок данных от модуля. Ибо данные принимаются порциями, размер которых легко может быть не кратным размеру кадра, так что в многоканальном режиме непрерывность потока критична.
Отсюда и рекомендации использовать двойной буфер и отдельный поток чтения.
Если Вы останавливали программу отладчиком во время сбора данных, то это произойдет наверняка.
Если это происходит при операциях с GUI - это значит, что программа написана неудачно, и процесс сбора данных ждет GUI (например, в Synchronize). Тут можно поступить по-разному - например, сделать большой (на много секунд) кольцевой (FIFO) буфер внутри программы, элементом которого является массив меньшего размера (определет период обновления графика при отсутствии задержек). Доступ к буферу надо сделать thread-safe (для кольцевого FIFO это можно сделать даже без критических секций, а можно и с ними).