Это не глупость - это же пример!
Эти все дела делаются, конечно, не в событии таймера, а в процедурах, которые вызываются из события таймера
скажу - oncomm использовать нельзя - его нет у драйвера COM-USB,
без doevents/sleep - индикатор становится зеленым, и больше не мигает.
Proxy
Ты пишешь полную чушь.
В результате, когда отображаешь, скажем, Inputbox - ожидаешь, что всё остановится, пока юзер не введёт чего туда, но у меня уже ни раз случалось, что окошко Inputbox`a всё ещё не закрыто (никто ничего ещё не нажал), а прога дальше выполняется, до конца тела параллельной процедуры
Хакер писал(а):Это пример глупости. Если у тебя не так, как в примере, то какой тогда смысл в этом примере?
Хакер писал(а):Для присланного примера решение заключается в полном переделывании логики (по причине "Неправильное проектирование приложения").
Но если у тебя не так, а как-то иначе, то, не зная, как именно там у тебя, ответить что-либо конкретное нельзя.
Ничего не понял.
Не правда.
У меня вместо пустого цикла - циклы по массивам, в них обновляются данные по формулам от пришедшего массива. Масштабирования, затухания, интерполяции... Несмотря на оптимизацию, целочисленность и прочее - это занимает приличное время.
Вот и я хочу, чтобы посылка команд в девайс, получение ответа, его расшифровка и индикация шли в процессе регулировки, а не после отпускания. Или скажу иначе: мне надо, чтобы действия пользвателя влияли на процесс сразу, не прерывая его.
у меня - так. Значит, еще глючокс.
Хакер писал(а):Это самое. А может у тебя там оптимизация никудышная? Я не утверждаю, что именно так, но предполагаю, т.к. повидал очень много оптимизаторов, оптимизирующих в обратную сторону.
Либо сейчас выполняется код, который делает математику, либо сейчас выполняется код, который обрабатывает перемещение ползунка.
Либо ты не делаешь DoEvents, и тогда пока идут расчёты, не выполяется никаких wm-related событий
Ага. Кучи людей здесь плакало о том, что пока у них работает длинный цикл, внутри которого нет DoEvents, у них не реагирует GUI. А тебя, значит, наоброт, такой полезный глючок, что пока работает длинный цикл, GUI продолжает работать.
Вы не поняли: я не таскаю скролл-бар, я его просто нажимаю мышью. И это блокирует работу таймера, если нажал во время его срабатывания. И не блокирует, если нажал в интервалах.
я их делаю - но они не помогают.
после них таймер замерзший?
Никакой код не выполняется, никаких событий - просто мышь нажата на ползунке (или открыто меню, или мышь нажата на заголовке формы) - но таймер мертвый.
если в нем нет doevents - он способен закончиться, если в его ходе нажали ползунок.
Прикладываю демонстрационный проект
Хакер писал(а):В его ходе не зажмут ползунок: некому будет обработать зажатие.
как только ты зажимаешь мышку на ползунке скролла, начинает выполняться цикл внутри WindowProc-а скроллбара. И этот цикл не закончит выполняться, пока ты не отпустишь ползунок.
вот это мне и надо!
Действие, выполняемое по таймеру, имеет у меня наивысший приоритет. А таскание формы по столу и мышиная возня - могут и затормозиться на 50-200 миллисекунд, если они такие серьезные, что (ничего по сути не делая) отнимают у таймера возможность сработать.
нет, всё-таки не удержусь, и прокомментирую это.
В начале ветки Вы сказали, что так программы не пишут.
И эта микросхема посылает компу события и нажатия, и отпускания кнопки.
Поэтому писать программу так, чтобы она крутилась непрерывно в цикле, ожидая отпускания кнопки, когда есть отдельные события - это и есть, как Вы написали, "что за глупость"
Кстати, а почему нажатие клавиши на клавиатуре не заводит бейсик в бесконечный цикл? Вот было бы здорово! Вставил doevents, чтобы отловить кнопку - а оно взяло, и завесило то, что должно затем среагировать на эту кнопку!
Хакер писал(а): У тебя (ты ещё не понял что-ли) выполнение переходит в DoEvents и не передаётся обратно пока не закончат работать с ползунком.
Чтобы обработчик какого-то события смог его обработать, надо чтобы кто-то запустил этот обработчик. А кто, скажи мне, кто может это сделать, кроме как цикл из того же потока?
Почему зажатие ползунка приводит к возникновению бесконечного цикла в его WP -- спроси у тех, кто писал скроллбары. Вероятно, они просто не нашли другого способа некриво реализовать перетаскивание.
прерывание.
Ну или опрос по таймеру.
Ведь не всё останавливается: если один таймер завис, то другой таймер на этой же форме продолжает работать.
да не только в сколлбаре дело. За заголовок формы если схватиться - тоже таймер застрянет, если это произошло в событии таймера, в котором есть doevents.
Сейчас этот форум просматривают: Google-бот и гости: 64