#0
by Stim
Хочу организовать бесконечный цикл в Делфи7, чтобы постоянно обновлялось поле вывода данных случайным числом, но в следующем коде скомпилированный проект просто зависает: procedure TForm1.BitBtn1Click(Sender: TObject); var i: single; n: Extended; r:real; begin while 1=1 do Begin i:= random; n := 0.9 + i*0.001; Label25.Caption := FloatToStr(n); end; end; end. что здесь не так?
#3
by YauheniL
Имхо, ты грузишь проц бесконечным циклом, а должен использовать параллельные процессы: один считает, другой визуалищирует Либо один и считает и визуализирует, но для этого у него должно быть хорошее время отклика
#9
by Stim
суровая. мне сейчас нужно по двум кнопкам запускать и останавливать бесконечный цикл. - помогло запустить, спс, вкупе со sleep работает. Но как теперь прерывать цикл по другой кнопке?
#11
by aka AMIGO
ОФФ. извини, .. где вы берете делфи? он платный? хотелось-бы поюзать, что это такое.. опыт работы с разными языками у меня есть.. полтора десятка - это точно :) для начала хотелось-бы сделать напоминалку на компе о времени обеда.. зы. конечная цель - не покушать, а создать её..
#12
by Rabbit
Числа выводить в обработчике TApplication.OnIdle (Как тут: , только без цикла, т.к. эта процедура сама вызывается в цикле. В обработчиках мыши только устанавливать признак "считаем/не считаем".
#18
by Stim
всем спс, код работает: procedure TForm1.BitBtn1Click(Sender: TObject); var i,j: single; n,l: Extended; begin a:= true; while 1=1 do Begin Application.ProcessMessages; sleep; i:= random; n := 0.9 + i*0.001; Label25.Caption := FloatToStr(n); j:= random; l := 0.6 + j*0.001; Label26.Caption:= FloatToStr(l); if a = false then exit; end; end; procedure TForm1.BitBtn2Click(Sender: TObject); begin a:= false; end; теперь пора разбираться с динамическими графиками.. платный.
#24
by Злобный Фей
Ну вообще красивше было бы отдельную процедурку. Или даже две. Но если там больше особо ничего больше не будет, то пофиг
#25
by Rabbit
-> Один есть всегда, лучше его и использовать. Пока форма простая, твой код будет работать, но если усложнится будешь иметь геморрой.
#27
by Злобный Фей
А в-третьих, тут форум по 1С, так что ее, родимую, и надо использовать, а то ишь, взяли моду, дельфи, студии всякие
#28
by Rabbit
Неправда! Как раз это хорошо видно в сишных исходниках. Embarcadero 2006ю Дельфи бесплатно раздавала, вроде, только в неё нельзя добавлять свои компоненты.
#32
by Rabbit
Для простых оконных приложений и реалтайм неоконных часто применяется диспетчер в WinMain.
#35
by H A D G E H O G s
Нафига? отдельный поток с пониженным приоритетом - спасет отца русской демократии.
#36
by Rabbit
Здиваешься над отцом русской демократии? Поток там даром не нужен :) В простых приложениях, или при простой иерархии объектов, реагирующих на сообщения, обработчики сообщений вызываются прямо в главном цикле приложения.
#37
by H A D G E H O G s
Как бы для обработки события есть, для каждого окна (IsWindow=True) есть WindowProc, и уже в ней идет обработка. Почему? Ну, например, ее можно в любой момент переопределить через SetWindowLong(GWL_WNDPROC,.....) на свою, выполнить свои обработчики, и вызвать/не вызывать стандартные через CallWindowProc
#39
by Rabbit
Как думаешь, сколько IsWindow=True у ? Представленный тобой случай уже не является "простым" (сравнительно, конечно). Вся эта механика в дельфях утоплена в модели отношений VCL и используется только при порождении новых оконных компонентов. Я-же имел в виду частные случаи вроде: while (GetMessage (&MsgS, NULL, 0, 0)) { UINT Msg = MsgS.message; UINT wp = MsgS.wParam; UINT lp = MsgS.lParam; if (Msg == WM_KEYDOWN || Msg == WM_KEYUP) { int VK = wp; // Код клавиши BOOL Rpt = (lp & 0x40000000); // Признак повторения BYTE Vel = BYTE ((Msg == WM_KEYDOWN)? 127 : 0); char *p = strchr (KeyToNote, tolower (VK)); if (p && p - KeyToNote < 24) { if (!Rpt) { // Повторение пропускаем MidiOutChan (0x90, BYTE (60 + p - KeyToNote), Vel); } continue; } } if (!IsDialogMessage (Dlg, &MsgS)) { DispatchMessage (&MsgS); } }
#40
by AlStorm
Эта... Делфи забросил еще на первом курсе университета, поэтому вот запямотовал: а в нем разве нельзя завести фоновые процессы? Я C# все долгие процессы кидаю в фон, чтобы форма не зависала.
#41
by micha
Thread + procedure TMyThread.Execute; begin while not Terminated do if w=true then Synchronize(Form1.OUTD1) else Synchronize(Form1.OUTD2); end;
#42
by AlStorm
Слава богу. Я уж испугался. Вообще удивительно, что Делфи до сих пор жив. Вроде они с восьмой версии перешли на .NET, нет? Тут то код явно "дельфийский":)
#43
by Андрюха
Delphi и сейчас живее всех живых, только называется уже Embarcadero RAD Studio, последняя версия - 2010.
#48
by supremum
Т. е. нужно что бы с определенной периодичностью обновлялось число в поле вывода? Тогда можно задействовать компоненты таймера и повесить на нее событие. Этот код не очень из-за того что переменная а не вычисляется в теле цикла. Далее пожно использовать цикл с постусловием repeat until.
#55
by Андрюха
Если в цикле используешь ProcessMessages то перерисовывать форму не нужно. Само отрисует.
#60
by Rabbit
То что обёртка - это понятно, просто данный поток будет спать почти всё время, имитируя работу таймера. В случае использования чистокровного таймера, не нужно городить синхронизацию.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Как организовать выбор определенной группы товаров при формировании отчета
- Как организовать поиск в справочнике по неполному соответствию
- v7: как организовать цикл по субконто для выбранного счета
- v7: Цикл Forall в 1С или как реализовать Пока ... Цикл для прочтения динамическ
- Отправка писем из 1с встроенным почтовиком уходит в бесконечный цикл...
В этой группе 1С
- v8: Расчет даты окончания договора
- При тестировании вылетает конфигуратор
- Открыть диалоговое окно из внешней печатной формы
- Принятие к учету ОС в Комплексной автоматизации
- Как перемешать строки в табличной части документа?
- УСН отличие смчета 62.1 и 62.3
- Как скопировать (а лучше переместить) один каталог в другой?
- Получение остатков из регистра бухгалтерии за период в разрезе каждого месяца периода
- v8: Свертка базы (Бухгалтерия сельскохозяйственного предприятия)
- При загрузке Windows 2003 перестает работать клавиатура
- нужна типовая обработка ВыгрузкаЗагрузкаДанныхXML.epf
- Свернуть все окна в Windows 7 - окончательное решение
- СКД: группировка дат по месяцам
- Joomla, как восстановить модуль ?
- Подсчет отобранных строк в ДокументСписок.
- Конвертация 2 ТЧ в 1 ТЧ проблемы
- Как добавить в печатную форму значения переменных?
- Передача прав на программу 1с
- Как превратить 1С 77 Бух Проф в Базовую.
- назначение переменной КлючВыгружаемыхДанных