0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 13
|
|
1 | |
Как экстренно остановить таймер?18.09.2013, 17:41. Показов 6160. Ответов 23
Метки нет (Все метки)
Здравствуйте, подскажите пожалуйста как экстренно остановить таймер. У меня такая ситуация, работает таймер в котором прописан sleep в 4 секунды, в это время работает второй таймер и проверяет какую-то ситуацию, if - если ситуация совпадает, then - тогда 2й таймер отключает 1й таймер Timer1.Enabled:=false; и запускает событие. Беда в том что это событие надо выполнить очень быстро, а он ждет завершение события 1ого таймера, а это как минимум 4 секунды прописанные в слипе. Как остановить 1й таймер полностью чтобы сбрасывал свое событие и выключался? Перерыл в инете кучу информации, killtimer, abort, exit, как это применить в моем случае не знаю подскажите пожалуйста.
0
|
18.09.2013, 17:41 | |
Ответы с готовыми решениями:
23
Как остановить таймер, как только число появившихся кругов станет равно указанному в поле Edit Остановить таймер Как остановить таймер Как остановить таймер? |
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 13
|
|
18.09.2013, 17:44 [ТС] | 3 |
0
|
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 13
|
|
18.09.2013, 17:50 [ТС] | 5 |
плюнуть конечно можно, но мне стало интересно, это может пригодиться везде, и мне очень интересно решение именно этой проблемы, часто сталкивался с данной проблемой.
0
|
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
|
|
18.09.2013, 17:55 | 8 |
А зачем в таймере еще и sleep?
0
|
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 13
|
|
18.09.2013, 18:01 [ТС] | 9 |
первый таймер зажимает клавишу на клавиатуре "G" и ждет 4 секунды потом отжимает, 2й таймер должен нажать пробел, он не может нажать пробел пока 1й таймер не подождет 4 секунды, даже если во втором таймере прописать отжатие клавиши "G" он все равно сделает это через 4 секунды.
Добавлено через 1 минуту а что нужно для этого? у меня 8 таймеров, если я все запихаю в 1 будет очень длинный код я в нем никогда не разберусь. Добавлено через 1 минуту таймер нажимает на кнопку клавы и отпускает через 4 секунды, я не знаю как это сделать без слипа.
0
|
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 13
|
||||||
18.09.2013, 18:03 [ТС] | 11 | |||||
вот код если интересно
0
|
Заблокирован
|
|
18.09.2013, 18:13 | 12 |
Да говорят ва, элементарно.
У вас работает таймер. Он крутится постоянно. Скажем интервал у него 10 мс 4000 / 10 - получаем количество шагов таймера для 4 сек. Где-то нажимается клавиша и устанавливается флаг удержания. По этому флагу начинает работать счётчик. Как только пройдёт нужное количество шагов, клавиша опустится и сбросится флаг удержания. Если за это время произойдёт проверка, она обнулит счётчик и счёт тут же остановиться. Тут уж можно и флаг остановки поставить, и по этому флагу запустить событие.
0
|
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 13
|
|
18.09.2013, 18:17 [ТС] | 13 |
ну так я не знаю как ставят эти флаги и принцип их работы))), подскажите пожалуйста, или ссылку с мануалом скиньте пожалуйста, я в delphi самоучка, знаю только элементарные основы.
0
|
Заблокирован
|
|
18.09.2013, 18:30 | 14 |
флаг, семафор, это обычная переменная типа boolean
Скажем её имя Pause Вначале Pause:=false; есть ещё счётчик tim_step; Вот вы чем-то нажимаете клавишу... ~~~~~~~~~~~~~~~~~~~ И сразу tim_step:= 4000 div Timer1.interval; Pause:=true;//установка флага А тут вот событие таймера if Pause then begin tim_step:= tim_step -1; if tim_step = 0 then Pause:=false; end; Вот так запустили таймер. а через 4 секунды остановили его Далее в этом же обработчике. Ваша проверка. Если всё в порядке то Pause:=false; Всё, счётчик остановлен преждевременно. Отпускаете клавишу И запускайте событие.
0
|
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
|
|
18.09.2013, 18:43 | 15 |
Так и сделать задать таймеру 4 секунды, и после выполнить Enabled:=false таймера при старте опять задать Enabled:=true и через 4 секунды он опять выключиться сам
Добавлено через 4 минуты Тут таймера только из за слипов путаются лучше и равда сделать один, а это все по отдельнм процедурам кинуть и через определенное положение счетчика вызывать их, и не много будет, а наоборот все в одном месте и видно что когда вызывается
0
|
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,255
|
|
18.09.2013, 18:47 | 16 |
А зачем это все нужно? Может это можно сделать как-то не через задний проход?
0
|
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 13
|
|||||||||||
18.09.2013, 19:08 [ТС] | 17 | ||||||||||
честно говоря мало что понял, покажите пожалуйста на конкретном коде
1й таймер
как? мне нужно нажатие этой клавиши в 4 секунды
0
|
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
|
|||||||||||||||||||||
18.09.2013, 19:36 | 18 | ||||||||||||||||||||
Поставь таймеру 4 секунды и убери эти слипы и будет таймер тебе нажимать ее каждые 4 секунды без выключения и включения сто раз, а надо выключиш его и все
Добавлено через 1 минуту Таймер для того и существует что срабатывает через определенное время. Добавлено через 1 минуту А так получается тебе таймер и не нужен, можеш просто в отдельной процедуре делать тоже самое. а время у тебя на слипах все держиться, и спрашивается зачем тебе в таком случае таймер. если он не работает как таймер? Добавлено через 1 минуту От сюда и виснет у тебя все, в таймере интервал стоит походу 1000. а ты его еще вешаеш на 4000 с лишним, поставь ему хоть время больше что б он не успевал срабатывать, и виснуть уже не будет. Добавлено через 16 секунд От сюда и виснет у тебя все, в таймере интервал стоит походу 1000. а ты его еще вешаеш на 4000 с лишним, поставь ему хоть время больше что б он не успевал срабатывать, и виснуть уже не будет. Добавлено через 5 минут Поставь таймеру интервал 4000 и запиши в него свое
Добавлено через 2 минуты И тут же добавь с 7 таймера код и будет он работать моментально тут же и без задержки
Можеш сделать интервал меньше например как писали 10 и записать код
0
|
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 13
|
|
18.09.2013, 19:52 [ТС] | 19 |
это бред мне нужно чтобы перед нажатием и отжатием клавиши G прошло 4 секунды, код который вы предоставили просто повторяет событие через 4 секунды, то-есть нажатие и отжатие клавиши будет моментальным, это не то что мне нужно!!!
0
|
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
|
|
18.09.2013, 20:32 | 20 |
Сам ты бред, тебе уже показали как и это сделать.
сделай перед включением таймера нажатие а в нутри таймера выключение, и всего делов-то, способов много, невидиш кроме слипа ничего.
0
|
18.09.2013, 20:32 | |
18.09.2013, 20:32 | |
Помогаю со студенческими работами здесь
20
Как остановить таймер? Как остановить таймер? Как остановить таймер? Как остановить консольный таймер? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |