• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Вопрос по Ttimer

  • Автор темы starbreaker
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

starbreaker

Здравствуйте! Есть следующая задача (в общих чертах): строиться график некоторой функции, зависящей от времени, причем отображение производится по мере вычисления новых значений, то есть пользователь видит как график непосредственно рисуется по точкам. Причем вычисления могут идти, в принципе, бесконечно, пока пользователь не остановит вычисления. Я реализовал это с помощью TTimer следующим образом: с каждым срабатыванием таймера вычисляется новое значение функции, где аргумент времени находится в прямой зависимости от интервала таймера: t += t + Timer1->Interval, затем значение рисуется на экране; а при нажатии пользователем соответствующей кнопки устанавливается Timer1->Enabled = false и вычисления останавливаются.
Оно вроде всё неплохо работает, но при том что сама функция весьма сложная, возникает следующий вопрос: что будет, если интервал срабатывания таймера меньше, чем то время, за которое вычисляется значение функции? То есть таймер сработал, началось вычисление, прошел заданный интервал времени, но значения функции ещё не вычислились, а уже должно выполниться следующее срабатывание таймера. Как в таком случае быть?
 
V

Vadik(R)

Я вообще программист на делфи, но посоветовал бы тебе при входе в обработчик онТаймер сделать что-то вроде:
Timer1.Enabled=false; а в конце кода дописать Timer1.Enabled=flag;
Ну соответственно обработчик для кнопки поставить
flag=not flag.
if (flag) {timer1.enabled=true; }
З.Ы. Не будет работать только в том случае, если вычисления долгие, а пользователь быстро нажмет на кнопку два раза. Ну это легко исправить - ввести еще одну булевскую переменную и чуть подредактировать код. Надеюсь, идею понял, сам додумаешь, а то лень проверять... :)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!