Другие языки программирования и технологии
Delphi!? Repeat Unitl... бесконечный цикл (вся прога зависает)?
repeat for m:=0 to g-1 do begin if (vrema[m]=handm) then ShowMessage('MY TEXT MSG'); end; until not flag; ситуация следующая: нажимаю кнопку Выполнить этот цикл и вся программа зависает, т.е. остальные кнопки нажать невозможно и закрыть форму тоже, при создании формы flag=true, на форму еще кинул кнопку STOP, для остановки цикла, т.е. в ней flag=false, по идее должно все работать, но нажать ее я немогу из-за того что все зависло, как такого избежать?
repeat
for m:=0 to g-1 do
{ begin здесь не нужен }
if (vrema[m]=handm) then
ShowMessage('MY TEXT MSG'); { вот эти сообщения нужно перенаправить куда-нибудь.. . лучше в поле Memo }
{ end здесь не нужен }
Application.ProcessMessages; { вот эта строчка не даст твоему циклу игнорировать другие действия }
until not flag;
for m:=0 to g-1 do
{ begin здесь не нужен }
if (vrema[m]=handm) then
ShowMessage('MY TEXT MSG'); { вот эти сообщения нужно перенаправить куда-нибудь.. . лучше в поле Memo }
{ end здесь не нужен }
Application.ProcessMessages; { вот эта строчка не даст твоему циклу игнорировать другие действия }
until not flag;
А как задаётся начальное для vrema, vrema[m], handm и g?
Издаля не видно, но вполне может виснуть, например, на кривом обращении к памяти в vrema.
Издаля не видно, но вполне может виснуть, например, на кривом обращении к памяти в vrema.
Компьютерные анекдоты и истории
Жена пpогpаммеpа говоpит мужу :
Ж: Доpогой, я хочу pебенка.
П: (Расстегивая шиpинку) Ща пpоинсталлиpуем 8*)
Жена пpогpаммеpа говоpит мужу :
Ж: Доpогой, я хочу pебенка.
П: (Расстегивая шиpинку) Ща пpоинсталлиpуем 8*)
Сергей Горностаев
ага, особенно в контексте того что я забыл о банальном таймере. гыыыы
Все компоненты VCL работают в одном потоке, поэтому если ты что то делаешь по нажатию одной кнопки, то пока не завершиться этот метод - действие второй кнопки обрабатываться не будет. Но всеже, в какой то мере может помочь метод Synchronize, но это решение будет подвержено некоторым глюкам. Вообще правильнее бы было засунуть ваш "бесконечный" код в потомка класса TThread как раз и предназначенного для параллельного исполнения нескольких потоков.
можно поставить какой нибудь счетчик и если допустим количество превышает норму то брякнуть цикл.
Сергей Горностаев
он у меня бексонечно должен выполняться, т.е. 24 часа в сутки, но так чтобы я его мог остановить
Нужно использовать многопоточность Windows, но боюсь уровень твоей подготовки недостаточен для этого.. . В качестве полумеры могу предложить в цикл вставить Application.ProcessMessages();
А вообще лучше делай консольное пиложение и не парь мозги, или тебе обязательно нужен VCL?
А вообще лучше делай консольное пиложение и не парь мозги, или тебе обязательно нужен VCL?
Сергей Горностаев
неа, консоль наврядли прокатит, у меня с инетом связано
Похожие вопросы
- Выход из бесконечного цикла С++
- Хорошо ли использовать бесконечный цикл for в C++?
- Каким образом зациклить програму? суть бесконечного цикла?
- Возможно ли выполнить действие 1 раз внутри функции, вызываемой в бесконечном цикле, с помощью её аргумента?
- Delphi. Зависает при выполнении цикла
- Люди у кавонить есть прога на Delphi 7??
- Delphi, цикл
- Рекурсия поиск на Delphi в цикле WHILE - исправьте код ?
- Согласны с этим - Глубинные причины ненависти к Delphi/Pascal ?
- Delphi:Прочитал, что если при динамическом создании компонента если указать Name объекта, то в последующем можно ->
vrema[1]:='22:55'; и т.п. в общем данные тут не при чем.