![]() |
|
![]() ![]() ![]() |
|
=Женек= |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 20.2.2005 Репутация: 1 Всего: 1 |
Господа, использую Builder XE
Объявляю глобальную переменную tick - для отсчета времени, типа флажка, ставлю Timer1 100 мсек и кнопку Button4
Виснет. Если же пишу
То программа выводит 0, сразу после запуска таймера, потом пока среагриую, нажму кнопку - цифр скажем 7, а потом программа идет дальше. В чем дело? Как организовать ожидание в программе? Для чего это нужно - пишу прогу для работы с UART. Вначале я настроил таймер и по его срабатыванию читаю из буфера приема и вывожу на экран, а по нажатию кнопки пишу что-либо. Все получалось. Но возникла необходимость по нажатию одной кнопки вызвать последовательную протокольную цепь обмена символами (программа для передачи прошивки в микроконтроллер), организовать которую запуском по таймеру одного и того же кода затруднительно. Хочется написать в одном обработчике что-о вроде: putchar(0xDA); while (в буфере пусто) {читаем буфер} if (в буфере что-то есть) {переносим из буфера в переменную} но именно на конструкции while все виснет. Это сообщение отредактировал(а) =Женек= - 7.2.2012, 07:05 |
||||
|
|||||
rodnover |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 7.4.2009 Репутация: нет Всего: 10 |
Потому что код в TForm1::Timer2Timer не выполнится никогда. Попробуйте так:
Только зачем так паузу делать? Это сообщение отредактировал(а) rodnover - 7.2.2012, 07:31 |
|||
|
||||
=Женек= |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 20.2.2005 Репутация: 1 Всего: 1 |
Объясните мне, что такое ProcessMessages(); ?
Да учтите, что я в итоговой программе не ShowMessage буду крутить, а код общения с UART. Почему код в Timer1Timer никогда не выполнится? Добавлено через 5 минут и 5 секунд И как правильно делать паузу? Добавлено через 11 минут и 27 секунд И еще - мне на самом деле нужна не пауза, а ожидание, когда в буфере приема появится необходимое количество байт. Короче вот набросок кода, который не работает, как правильно сделать безо всяких таймеров?
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
||||
|
||||
sawfish |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 30.7.2008 Где: Новосибирск Репутация: 8 Всего: 8 |
||||
|
||||
=Женек= |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 20.2.2005 Репутация: 1 Всего: 1 |
Все равно какая-то хрень получается....
while(RxBytes==0) { Application->ProcessMessages(); USBStat=FT_GetStatus(hUSB,&RxBytes,&TxBytes,&EventDWord); } ПРограммма либо зависает ненадолго, либо выдает RxBytes огромными цифрами.... |
|||
|
||||
=Женек= |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 20.2.2005 Репутация: 1 Всего: 1 |
Как мне получить немедленную реакцию на поступление символа? И в тоже время не перестать слушать, не дождавшись символа?
|
|||
|
||||
=Женек= |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 20.2.2005 Репутация: 1 Всего: 1 |
Хм, как ни странно, получилось без ProcessMessages() следующим образом:
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
||||
|
||||
=Женек= |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 20.2.2005 Репутация: 1 Всего: 1 |
ну таймаут добавить не проблема, это, как говорит Леонид Каневский, уже совсем другая история.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |