Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Приостановка цикла в ожидании события 
:(
    Опции темы
Dufe
Дата 29.6.2006, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 23.3.2005

Репутация: нет
Всего: нет



Есть цикл. При некоем условии необходимо приостановить его и ждать пока произойдет событие (тыкну мышкой по определенному месту). После продолжаем цикл.
Искал на форуме- не нашел. Помогите, плз. 
PM MAIL WWW ICQ   Вверх
Guedda
Дата 29.6.2006, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Код

var
  CanContinue : boolean = false;
//...
procedure TForm1.Button1Click(Sender : TObject);
begin
  CanContinue := true;
end;

procedure YourProcedure;
begin
  for i := 0 to 1000 do
    if твоё_условие then //выполняешь действия
    else 
    while not CanContinue then begin
      Application.ProcessMessages;
      Sleep(1);
    end;
end;
 


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Sunvas
Дата 30.6.2006, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Лучше вынести все в отдельный поток, а там действовать как Guedda прописал. 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Dufe
Дата 30.6.2006, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 23.3.2005

Репутация: нет
Всего: нет



to Guedda такой цикл пробовал. Реально жрет ресурсы. Даже окно не закрыть.

to Sunvas пробовал создавать в цикле поток, но он стартует параллельно=> цикл продолжается. Как реализовать? 
PM MAIL WWW ICQ   Вверх
Демо
Дата 30.6.2006, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(Dufe @  30.6.2006,  11:41 Найти цитируемый пост)
to Guedda такой цикл пробовал. Реально жрет ресурсы. Даже окно не закрыть.


Неправда. Свой код приводи. 


--------------------
    
PM MAIL ICQ Skype   Вверх
Dufe
Дата 30.6.2006, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 23.3.2005

Репутация: нет
Всего: нет



Это на работе. Машина 133пень. И это правда. Код точно такой же. Работает. Но в режиме (цикла) ожидания окно не закрыть. Вот я и пытался с потоком сделать, но ничего не получилось, поэтому и обратился за помощью. 
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 30.6.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Sleep больше поставь 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Демо
Дата 30.6.2006, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(Dufe @  30.6.2006,  14:49 Найти цитируемый пост)
Это на работе. Машина 133пень. И это правда. Код точно такой же. Работает. Но в режиме (цикла) ожидания окно не закрыть. Вот я и пытался с потоком сделать, но ничего не получилось, поэтому и обратился за помощью.  


Приводи код цикла и OnClick. 


--------------------
    
PM MAIL ICQ Skype   Вверх
Dufe
Дата 30.6.2006, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 23.3.2005

Репутация: нет
Всего: нет



Демо,  smile. Проблема не в правильности написания кода. Неужели, возможно здесь сделать ошибку или как-то по-другому написать? Что ты нового хочешь увидеть. Меня не устраивает как это работает! На моем компе 3ГГц все ОК, но на работе - туго. 
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 1.7.2006, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(Dufe @  30.6.2006,  11:41 Найти цитируемый пост)
to Guedda такой цикл пробовал. Реально жрет ресурсы. Даже окно не закрыть.

to Sunvas пробовал создавать в цикле поток, но он стартует параллельно=> цикл продолжается. Как реализовать? 


Ты вынеси когд, что тебе дал Guedda в поток и приложение глючить не будет. Или используй таймер.
 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Yanis
Дата 1.7.2006, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Dufe
Напиши какая задача стоит перед тобой и возможно мы поймём, что ты хочешь от нас. Может быть тут и без цикла можно обойтись... 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Guedda
Дата 1.7.2006, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Цитата(Dufe @  30.6.2006,  12:41 Найти цитируемый пост)
пробовал создавать в цикле поток, но он стартует параллельно=> цикл продолжается. Как реализовать?

Обыкновенно. В форме, в которой будешь нажимать на что-то для установки паузы, в разделе public прописываешь Переменную CanContinue;
А из потока проверяешь так:
Код

if Mainform.CanContinue then //... и так далее...


Можно ещё синхронизировать, но, я думаю, тебе рано ещё до этого... 


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Akella
Дата 4.7.2006, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



sleep(500), как минимум!!! 
PM MAIL   Вверх
Dufe
Дата 4.7.2006, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 23.3.2005

Репутация: нет
Всего: нет



Guedda, можешь привести код. Не получается. В потоке делаю 
Код

while not terminated do if CanContinue then Sleep(500) else Break;

А в цикле процедуры вызываю этот поток Create. Но цикл не приостанавливается, не ждет нажатия кнопки. Может как-то TEvent использовать? 
PM MAIL WWW ICQ   Вверх
Guedda
Дата 4.7.2006, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Код потока:
Код

public
  CanContinue : boolean = false;
  procedure YourProcedure;
//...

procedure TMainThread.YourProcedure;
begin
  for i := 0 to 1000 do
    if твоё_условие then //выполняешь действия
    else 
    while not CanContinue then begin
      Application.ProcessMessages;
      Sleep(500);
    end;
end;

procedure TMainThread.Execute;
begin
  FreeOnTerminate := true;
  YourProcedure;
end;

Код основной программы:
Код

procedure TForm1.Button1Click(Sender : TObject);
begin
  MainThread.CanContinue := true;
end;


У меня всё работает. 


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0955 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.