Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/26: Рейтинг темы: голосов - 26, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 12.12.2012
Сообщений: 25

Прерывание цикла for

29.07.2013, 02:17. Показов 5813. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые форумчане. Можно ли как то прервать цикл for i
Например у меня стоит for i = 0 to 1000 do begin
мне нужно каждые 500 раз тормозить на час. Как это лучше сделать? желательно чтобы приложение не висело (sleep тормозит всю отзывчивость)
Спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.07.2013, 02:17
Ответы с готовыми решениями:

Прерывание цикла for
Собственно, вопрос в чем. Я запускаю на выполнение постройку графика, в котором количество точек взято с запасом. Соответственно, если...

Внезапное прерывание цикла
Есть цикл: Repeat a:=a+1; SetCursorPos(x,y); mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP,...

Есть ли возможность реализовать прерывание цикла консольного приложения нажатием клавиши?
Выполняется цикл, при нажатии клавиши (например "А") цикл прерывается, но программа не закрывается. Приложение консольное

28
30.07.2013, 17:22
Студворк — интернет-сервис помощи студентам

Не по теме:

Dr_Quake, это говорят эмбаркодеры

0
30.07.2013, 17:28

Не по теме:

Цитата Сообщение от Dr_Quake Посмотреть сообщение
кто сказал
Я сказал)
А мне сказали исходники ComCtrls:

procedure TTimer.UpdateTimer;
begin
KillTimer(FWindowHandle, 1);
if (FInterval <> 0) and FEnabled and Assigned(FOnTimer) then
if SetTimer(FWindowHandle, 1, FInterval, nil) = 0 then
raise EOutOfResources.Create(SNoTimers);
end;


А если бы там была бы иная строчка
if SetTimer(0, 1, FInterval, @SomeTimerProc) = 0 then
что вполне возможно для некоей невиндовой платформы, то и в этом случае SomeTimerProc() будет вызываться в контексте того и только того потока, который вызвал ф-цию SetTimer()

0
30.07.2013, 17:31

Не по теме:

mss, я не про то, а про кривожопость реализации, забавно что до сих пор через WM работает VCL

0
30.07.2013, 17:48

Не по теме:

кривожопость реализации..через WM
Что это она "кривожопая" ?
Нормальная реализация, для формошлепства самое то)
А для спецразработок существуют сторонние альтернативные реализации классов для работы с таймером.

0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
30.07.2013, 20:00
Цитата Сообщение от Пытливый Посмотреть сообщение
Период срабатывания 1 час
Но ТС нужно не это, а пауза в час между достижением шага итерации и возобновлением итераций. Что, если выполнение 500 итераций будет продолжаться дольше часа?
0
 Аватар для Пытливый
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
31.07.2013, 00:30
Что, если выполнение 500 итераций будет продолжаться дольше часа?
А вот это интересный вопрос. Но ведь можно при входе в событие таймера делать его недоступным, выполнять итерацию 500 раз независимо от времени исполнения и по выходе из события снова включать таймер. Вроде должно сработать правильно.

ПС: А вообще интересно, отсчет в самом таймере начинается снова с момента выхода из события или как-бы независимо от события. Надо поковырятся.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
31.07.2013, 01:09
Цитата Сообщение от Пытливый Посмотреть сообщение
или как-бы независимо от события
Или.
Отсчет периодов, равных зн-ю св-ва Interval, начинается с момента Enabled=True и заканчивается в момент Enabled=False, вне зависимости от того как долго исполняется обработчик OnTimer и назначен ли он вообще.

Добавлено через 7 минут
Все что делается в момент истечения очредного периода - это отправка сообщения WM_TIMER в очередь сообщений невидимого окна. Причем система при запросе на постановку WM_TIMER в очередь сначала проверяет нет ли в ней уже такого сообщения и игнорирует запрос, если WM_TIMER уже есть в очереди окна.

А то что происходит далее - это уже забота потока, создавшего это невидимое окно: вовремя выгребет из очереди WM_TIMER - вовремя и событие OnTimer возникнет, невовремя выгребет или вообще не выгребет (будучи занят в это время чем-то хз более архиважным ) - невовремя соотв-но и OnTimer возникнет или вообще не возникнет.
0
31.07.2013, 01:16

Не по теме:

mss, что дважды изврат, кучу окон плодить. Даже в WINAPI SetTimer есть параметр - ID получателя, ну или WM_USER и допбайты в сообщении, всё можно валить на хотя бы Parent если оно TForm.

0
134 / 133 / 22
Регистрация: 29.08.2012
Сообщений: 353
31.07.2013, 01:18
я тут в отпуске был, у меня голова чет не варит:
Цитата Сообщение от bloodvirus Посмотреть сообщение
мне нужно каждые 500 раз тормозить на час. Как это лучше сделать? желательно чтобы приложение не висело (sleep тормозит всю отзывчивость)
тоесть у него там на первых страницах уже готовые варианты, если нужно продолжать счет, то никто не мешает делать шаг итераций, напимер в эдит вводим по сколько раз выполнять, и ставим например такой цикл:
Delphi
1
for i := n to n+strtoint(edit1.text) do ...
где n глобальная наример integer
после этого цикла врубать таймер с интервалом 100, и проверять прошел ли час, если да то запустить цикл, время фиксировать можно как до, так и после цикла, если следить за каждой итерацией цикла то наверно нужно где то хранить временные интервалы на каждом шаге, тогда for не подойдет, я бы наверно сделал через дин.массив, с размерностью равной количеству итераций до блокировки в котором хранил бы временые точки, циклически проверял бы этот массив через while, и перед шагом проверял бы прошел ли час после обращения к текущей ячейке массива, если нет то все как раньше, включили таймер с интервалом 100 и запомнили тот элемент на котором остановились, прошел час-"занулили попытку, запустили цикл"...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.07.2013, 01:18

Прерывание цикла
Добрый день! Подскажите пожалуйста Как прервать цикл через определенный период, но что бы потом он начал выполнятся заново, а через...

Прерывание цикла
Здравствуйте. Есть ф-ция для загрузки нескольких фото.Нужно ограничить кол-во до пяти и вывести сообщение. public function...

Прерывание цикла
1. Используя оператор цикла, вычислите значения синуса при 21 значении аргумента от 0,2 до 4 с шагом 0,2. 2. Создайте матрицу...

Прерывание цикла
Доброго времени суток. Подскажите, как мне в этом случае прервать программу, чтоб после числа 100, программа закончилась и на следующий...

Прерывание цикла!
каким образом можно прервать while путем ввода какого нибудь символа, чтобы не нужно было при каждом проходе тела цикла вводить этот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru