Size: a a a

2020 December 02

GB

George Bakhtadze in Delphi & Lazarus
zamtmn
это немодально. вот цикл
function GDBcommandmanager.Get3DPointInteractive(...):Boolean;
begin
 ...
 while (pcommandrunning^.IData.GetPointMode=TGPWait)and(not Application.Terminated) do
 begin
      Application.HandleMessage;
 end;
 ...
end;
тут неявно предполагается, что для нормальной работы UI достаточно только этого вызова. если это где-то в документации написано, то ок. иначе это деталь реализации, которая может отличаться не только в зависимости от версии, но и от платформы
источник

SB

Sergey Bodrov in Delphi & Lazarus
Это event loop внутри event loop, но без обработки исключений.
источник

z

zamtmn in Delphi & Lazarus
George Bakhtadze
тут неявно предполагается, что для нормальной работы UI достаточно только этого вызова. если это где-то в документации написано, то ок. иначе это деталь реализации, которая может отличаться не только в зависимости от версии, но и от платформы
в документации неастречал, там внутри WidgetSet.AppProcessMessages. тесты в винде и линукс проблем невыявили
источник

z

zamtmn in Delphi & Lazarus
Sergey Bodrov
Это event loop внутри event loop, но без обработки исключений.
да. обработки исключений пока нет
источник

z

zamtmn in Delphi & Lazarus
вернее есть - глобальная
источник

z

zamtmn in Delphi & Lazarus
можно сделать на ProcessMessages в чем проблема?
источник

VA

Viktor Akselrod in Delphi & Lazarus
zamtmn
можно сделать на ProcessMessages в чем проблема?
ты изначально ответил, что у тебя не ProcessMessages, а в итоге выяснилось, что тоже самое, только в другой подаче.
а обсуждать чем плох ProcessMessages или другой принудительный вариант с ручным проталкиванием цикла для псеводасинхронности вместо общепринятых паттернов - нет особого желания
источник

z

zamtmn in Delphi & Lazarus
Viktor Akselrod
ты изначально ответил, что у тебя не ProcessMessages, а в итоге выяснилось, что тоже самое, только в другой подаче.
а обсуждать чем плох ProcessMessages или другой принудительный вариант с ручным проталкиванием цикла для псеводасинхронности вместо общепринятых паттернов - нет особого желания
ну яж не виноват что можно написать свой цикл обработки, а можно в цикле вызывать processmessages. это будет почти тоже самое. с одним но processmessages - будет очень кушать проц. свой цикл - нет. вот и вся разница
источник

z

zamtmn in Delphi & Lazarus
Viktor Akselrod
ты изначально ответил, что у тебя не ProcessMessages, а в итоге выяснилось, что тоже самое, только в другой подаче.
а обсуждать чем плох ProcessMessages или другой принудительный вариант с ручным проталкиванием цикла для псеводасинхронности вместо общепринятых паттернов - нет особого желания
такчто извиняй, но это не processmessages
источник

VA

Viktor Akselrod in Delphi & Lazarus
zamtmn
такчто извиняй, но это не processmessages
как скажешь 🙂
источник

z

zamtmn in Delphi & Lazarus
Viktor Akselrod
ты изначально ответил, что у тебя не ProcessMessages, а в итоге выяснилось, что тоже самое, только в другой подаче.
а обсуждать чем плох ProcessMessages или другой принудительный вариант с ручным проталкиванием цикла для псеводасинхронности вместо общепринятых паттернов - нет особого желания
ну невижу я проблем - хоть убей.  будь другом, уважаемый гуру,  поведай что меня ждет на этой стезе))
источник

VA

Viktor Akselrod in Delphi & Lazarus
zamtmn
ну невижу я проблем - хоть убей.  будь другом, уважаемый гуру,  поведай что меня ждет на этой стезе))
во-первых, гуру я себя не называл. во-вторых, все доводы тебе привели изначально против твоего метода и ProcessMessages в частности еще в первый раз, когда ты задавал вопрос. ты можешь вернуться в историю и перечитать.
про то, чем плох ProcessMessages в целом можно и в этой группы почитать и погуглить
источник

z

zamtmn in Delphi & Lazarus
Viktor Akselrod
во-первых, гуру я себя не называл. во-вторых, все доводы тебе привели изначально против твоего метода и ProcessMessages в частности еще в первый раз, когда ты задавал вопрос. ты можешь вернуться в историю и перечитать.
про то, чем плох ProcessMessages в целом можно и в этой группы почитать и погуглить
в первый раз доводов никаких небыло. были реплики людей знающих, но данную ситуацию непонимающих (зачем это вообще нужно) - советы как это можно делать подругому
источник

SB

Sergey Bodrov in Delphi & Lazarus
zamtmn
в первый раз доводов никаких небыло. были реплики людей знающих, но данную ситуацию непонимающих (зачем это вообще нужно) - советы как это можно делать подругому
Если все хорошо и проблем нет, то зачем спрашивать и спорить? =)
источник

z

zamtmn in Delphi & Lazarus
я не спорю. подобных реализаций я нигде не встречал. но метод используется очень активно в серъезных программах. Вот я и хочу выснить как сделать это правильно
источник

z

zamtmn in Delphi & Lazarus
пока единственным мнением к которому нужно прислушаться считаю - что надо делать в отдельном потоке. но на данном этапе реализовать это немогу по многим причинам. остальные на уровне сам делаешь - сам дурак
источник

SB

Sergey Bodrov in Delphi & Lazarus
Я бы сделал очередь (или стек) команд. По таймеру или внутри фонового потока, брать из очереди команды по одной и выполнять. Если попалась интерактивная команда, требующая действия пользователя, то ставить на очередь признак паузы, пока не будет получен ответ пользователя, который добавляется в голову очереди как команда.
источник

SB

Sergey Bodrov in Delphi & Lazarus
Если команды будут текстовые, то это очень легко отлаживать и писать в лог.
источник

GB

George Bakhtadze in Delphi & Lazarus
zamtmn
пока единственным мнением к которому нужно прислушаться считаю - что надо делать в отдельном потоке. но на данном этапе реализовать это немогу по многим причинам. остальные на уровне сам делаешь - сам дурак
а что за причины? навскидку никаких проблем не вижу, только в commandManager надо будет поменять, чтоб учесть, что из другого потока с UI взаимодействие идет
источник

SB

Sergey Bodrov in Delphi & Lazarus
Очередь команд без проблем работает как в основном потоке (по таймеру) так и в фоновом.
источник