Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Цикл до определеного условия?


Автор: WaReZMEN 23.7.2008, 01:03
Вообщем есть у меня код:
Код

  Repeat
    ...

  Until P<>''; 

Все это делается в кансоле работает все отлично кроме того что процессор загружается на 99% что не очень хорошо... Что хочется: организовать некий процесс каторый ждал бы когда именится условие P<>'' . Выполнил определеное деиствие и равершил свою работу... Только как это организовать не ясно... Есть у каго какие идеи?

Автор: Данкинг 23.7.2008, 01:09
 smile жалко мне наш великий и могучий русский язык иногда бывает... Даже не иногда, а с каждым днём всё чаще... Я даже значения некоторых слов-то не знаю, к примеру, что такое "вообщем" - понятия не имею. smile 
По теме: зачем что-то изобретать, когда оное уже изобретено. smile Ну, в качестве альтернативы можно предложить проверку условия с переходом на метку. Т.е.:

Код

label aaa;
...
if p<>'xxx' then goto aaa;


Автор: WaReZMEN 23.7.2008, 03:02
Данкинг, Прошу прощение за ошибки русский это моя слабость.... по поводу Goto...label Еще в школе учили что чем больше goto тем ниже квалификация программиста... К томуже эта канструкция практически не чем не отлечается от Repeat   ...  Until P<>''. Процессор попрежнему весь загружен... Вообще нужно сделать какоито системный процес и делать через него но как я не вкурсе... smile  

Автор: THandle 23.7.2008, 05:15
WaReZMEN, можно использовать например ожидание в цикле, миллисекунд этак 200-400. Можно, я думаю использовать дополнительный поток...

Автор: WaReZMEN 23.7.2008, 05:21
THandle, с задержкои све ок спасибо большое!!!! Но про паток тоже интересно если можно раскажи. smile 

Автор: THandle 23.7.2008, 05:49
Лучше чем тут, про потоки уже нигде не расскажут:

http://forum.vingrad.ru/forum/topic-60076.html

Автор: Данкинг 23.7.2008, 10:46
Цитата(WaReZMEN @  23.7.2008,  04:02 Найти цитируемый пост)
Еще в школе учили что чем больше goto тем ниже квалификация программиста... 

Вопрос часто обсуждаемый и весьма и весьма спорный... smile Я так не считаю. smile 

Автор: Snowy 23.7.2008, 12:01
Проверять всё равно придётся.
Но тут поможет простое отпускание треда.
Дай в цикле строчку 
Код
  Sleep(32);
и нагрузки не станет.

Добавлено через 3 минуты и 14 секунд
Цитата(Данкинг @  23.7.2008,  10:46 Найти цитируемый пост)
Вопрос часто обсуждаемый и весьма и весьма спорный...  Я так не считаю.  
GoTo - плохой тон.
Да и никакого отношения к решению вопроса не имеет.
Ну абсолютно никакого.
Просто замена нормально конструкции на идиотскую.
Код ухудшается, а результата по прежнему никакого.

Автор: Rennigth 23.7.2008, 13:25
Snowy, а почему sleep именно 32? Методом проб и ошибок подобранно? Почему не Sleep(0)? разницы то почти не будет, а может и совсем не будет...

Автор: Snowy 23.7.2008, 13:52
32 - стандартный тайминг.
А ноль не во всех версиях винды срабатывает...
В теории должен. На практике вот...

Автор: Данкинг 23.7.2008, 21:58
Цитата(Snowy @  23.7.2008,  13:01 Найти цитируемый пост)
GoTo - плохой тон.

Ну да, как же, а ещё каждую строчку кода следует непременно комментировать, а процедурам давать имена вроде "my_procedure_for_timer1". smile  smile Ах да, на закрытие формы ещё следует повесить окно "Вы увеерны?" Тогда плохого тона не будет. smile 

Цитата(Snowy @  23.7.2008,  13:01 Найти цитируемый пост)
Да и никакого отношения к решению вопроса не имеет.

Я привёл другой вариант решения данной задачи. Нагрузку на процессор при этом не проверял. smile 

Автор: WaReZMEN 24.7.2008, 01:39
когда THandle сказал попробовать задержку я именно sleep и поставил smile так что всем спасибо!

Автор: greenpc 24.7.2008, 09:15
Snowy
вроде Application.ProcessMessages тоже не отменяли

Автор: sai_NT 24.7.2008, 09:53
Цитата(greenpc @ 24.7.2008,  09:15)
Snowy
вроде Application.ProcessMessages тоже не отменяли

Не отменяли, но нагрузки на проц это не уменьшит, просто окно сможет обрабатывать посылаемые ей сообщения =)

Автор: Snowy 24.7.2008, 12:38
Ну Sleep здесь нужен не для задержки, а для переключения треда.
Задержка здесь - побочный эффект.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)