Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2013, 16:41   #1
ддимочка
Пользователь
 
Регистрация: 30.08.2011
Сообщений: 26
По умолчанию Динамическая Индикация на Label или Edit

Здравствуйте всем! Столкнулся с совершенно неожиданной проблемой. Когда пытаюсь во время выполнения цикла for изменять значения полей Label или Edit (которые в каждом новом проходе обновляются), то программа соответствующие строки кода игнорирует. Только когда цикл заканчивается, в данные поля записываются последние значения. Во время всех проходов цикла, повторюсь, поля пустые. Вот код
Код:
for(a=0; a<k; a++)
{
Edit4->Text=FloatToStr(t);
t=t/0.004883 ; // формируем значение для ЦАП
// далее округляем полученное значение
i=t;
if ((t-i)>=0.5)
i=t+(1-(t-i));
else
i=t;
// формируем последовательность байтов для отправки
buf[0]=i%10;// младший разряд
buf[1]=((i-buf[0])/10) %10 ;
buf[2]=((i-buf[0]-(buf[1]*10))/100) % 10;
buf[3]=((i-buf[0]-(buf[1]*10)-(buf[2]*100))/1000) % 10;// старший разряд
buf[4]=1;
WriteFile(com_handle, buf, 5, &bc, 0); // отправляем данные в порт
for (i=0; i<1000000000; i++);
ReadFile(com_handle, buf1, 4, &bc, 0);
i=buf1[0]+buf1[1]*10+buf1[2]*100+buf1[3]*1000;
Edit5->Text=FloatToStr(i*0.0025);
t=(t*0.004883)+n;
Выделенные строки игнорируются программой. На месте Edit c равным успехом может стоять и Label

Последний раз редактировалось Stilet; 08.09.2013 в 17:25.
ддимочка вне форума Ответить с цитированием
Старый 08.09.2013, 16:45   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Добавьте в цикл Sleep(100), например (мб "поможет")
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 08.09.2013 в 16:48.
BDA на форуме Ответить с цитированием
Старый 08.09.2013, 18:21   #3
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

А перерисовку ( Repaint(); ) в цикл добавлять не пробовали? (если действительно есть шанс что-то рассмотреть после каждой итерации).
nick42 вне форума Ответить с цитированием
Старый 08.09.2013, 19:00   #4
ддимочка
Пользователь
 
Регистрация: 30.08.2011
Сообщений: 26
По умолчанию

Спасибо! перерисовка помогла
ддимочка вне форума Ответить с цитированием
Старый 08.09.2013, 19:25   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...внутри циклов и из потоков к VCL лучше вообще не обращаться. Самый говноспособ это просто поставить Application.ProcessMessages внутри, но это дает задержку в обработке из-за необходимости отработки очереди сообщений для формы. Для потоков - синхронизе. Еще один обходной способ, годящийся и для потоков и циклов для визуализации (индикации, но не архивирования!) это работать с глобальной переменной, а уже из другого потока или в потоке таймера отображать в метке (ваших label-ях) значение этой/их global var.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая индикация. sokla Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 03.10.2011 11:01
Ввести 3 числа ( в 3 компонента Edit ) и расположить их по возрастанию в компоненте Label Сароникус Помощь студентам 0 01.10.2011 22:31
Динамическая индикация для Atmega 8535. Проблема. Mr_Gutsy Помощь студентам 16 10.05.2011 21:36
Label напротив Edit pahanzona Общие вопросы Delphi 9 26.02.2011 10:40
Индикация для плеера Сергей Михайлович Фриланс 2 09.02.2011 09:01