Оберон-клуб «ВЄДАsoft»
https://zx.oberon.org/forum/

как вызвать ProcessMessages?
https://zx.oberon.org/forum/viewtopic.php?f=79&t=425
Страница 1 из 2

Автор:  budden [ 17 окт 2018, 14:34 ]
Заголовок сообщения:  как вызвать ProcessMessages?

В BlackBoxComponentBuilder, чтобы приложение не выглядело временно зависшим. Например, при массовой перекомпиляции.

==============================

Ответ вкратце: ProcessMessages - это функция Дельфи, а не WinApi, к-рая запускает новый модальный цикл сообщений. В ББЦБ на данный момент нет аналога этой функции (но, наверное, есть доступ к WinApi).

Автор:  Zorko [ 19 окт 2018, 01:11 ]
Заголовок сообщения:  Re: как вызвать ProcessMessages?

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

Автор:  budden [ 19 окт 2018, 10:42 ]
Заголовок сообщения:  Re: как вызвать ProcessMessages?

тут пишут, что для него не нужно многопоточности. Оказывается, это - функция из Дельфи и работает она так:
Код: "OBERON"
  1.  
  2. if PeekMessage(msg, hWnd, 0, 0, PM_REMOVE) then begin
  3. TranslateMessage(msg);
  4. DispatchMessage(msg);
  5. end;
  6.  

Но подобная функция есть и в tcl/tk и тоже не связана с многопоточностью.
Цитата:
С помощью этой команды обновляется состояние приложения, поскольку при ее вызове обрабатываются все необработанные события и выполняются все асинхронные вызовы (idle callbacks).

Автор:  Zorko [ 19 окт 2018, 12:01 ]
Заголовок сообщения:  Re: как вызвать ProcessMessages?

Тогда что, вклинить эту функцию в потроха компилятора, чтобы периодически вызывалась?

Автор:  Comdiv [ 19 окт 2018, 13:24 ]
Заголовок сообщения:  Re: как вызвать ProcessMessages?

Лучше разбить исходный алгоритм на части и выполнять его как фоновую задачу. Например, массовая перекомпиляция хорошо делится по трансляции отдельных модулей. Это лучше, чем вызывать обработчик сообщений среды напрямую. Но второе проще.

Автор:  Zorko [ 19 окт 2018, 14:31 ]
Заголовок сообщения:  Re: как вызвать ProcessMessages?

budden, нужно одеться в улыбчиво-европейский доброжелательный стиль, перетряхнуть свои познания в английском, пойти регнуться на community.blackboxframework.org и вежливо у них попросить добавить эту фичу. В надежде на понимание. Либо плюнуть на всё это и самолично пилить свою сборку BlackBox.

Автор:  vlad [ 19 окт 2018, 17:29 ]
Заголовок сообщения:  Re: как вызвать ProcessMessages?

Zorko писал(а):
Тогда что, вклинить эту функцию в потроха компилятора, чтобы периодически вызывалась?


Прокрутка цикла сообщений - очень специфическая штука, ее нельзя вставлять куда попало. Если по-нормальному, то перекомпиляция, как и любая другая не-GUI задача, должна делаться в отдельном процессе или потоке с опциональными уведомлениями о прогрессе.

Автор:  Zorko [ 19 окт 2018, 19:54 ]
Заголовок сообщения:  Re: как вызвать ProcessMessages?

vlad, всё это так, если делать канонично в духе тяжёлых Thread'ов винды или fork'ов линукса. А как будет православно, по-оберонски?

Автор:  vlad [ 19 окт 2018, 21:38 ]
Заголовок сообщения:  Re: как вызвать ProcessMessages?

Zorko писал(а):
vlad, всё это так, если делать канонично в духе тяжёлых Thread'ов винды или fork'ов линукса. А как будет православно, по-оберонски?


Я так понимаю компилятор неотделим от гуйни в ББ (или была какая-то консольная версия)? Так что короткий ответ - по-нормальному никак. На оберонкоре обсуждали подобную проблему и резолюция "гуру" был в духе "бить долгое действо на части и исполнять их в Actions". Что конечно нифига не масштабируется, но "у кого надо работает" (с).

Автор:  Comdiv [ 19 окт 2018, 22:50 ]
Заголовок сообщения:  Re: как вызвать ProcessMessages?

Не масштабируется на что? На ядра процессора? Так в исходном сообщении не об этом. Помнится, budden писал, что рассматривает однопоточность как преимущество.

Страница 1 из 2 Часовой пояс: UTC + 2 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/