AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.09.2021, 22:54   #1  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Да ничего такого потокового магического этот вызов не делает.
Это прям основы винды - кажое окно имеет связанную с ним оконную процедуру
Окно это прям не буквально то что юзеры считают окном, а то что имеет HWND - и кнопки и поля ввода и чекбоксы они то же окна
Во всяких хитрозагнутых фреймоворках и дотнетах правило что отдельный окошко/контрол - отдельное HWND может уже не соблюдаться, но древнюю по своей сути аксапту до 2012 версии включительно это не касается
Общение с окном идет через очередь сообщений - нажатие кнопки клаивиатуры, события мышки, необходимость отрисовки, пользовательсие события - всё это события в очереди сообщений
Очередь сообщений разребает оконная процедура - по сути большой SWITCH, который выполняет какие запрограммированные действия в ответ на события в очереди
И эта очередь разребается когда поток в котором оконная процедура ничем не занят. Соответственно если занялись чем то безумным надолго, то окно замирает
yield всего лишь принудительно вызывает оконные процедуры "вне графика". Отсюда и размораживание интерфейса и иллюзия многопоточности
Что там реально случится зависит только от конкретной оконной процедуры. Но абсолютно точно никаких отдельных потоков порождаемых самой системой

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

Последний раз редактировалось db; 16.09.2021 в 23:10.
За это сообщение автора поблагодарили: mazzy (2), sukhanchik (4).
Старый 17.09.2021, 00:27   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от db Посмотреть сообщение
Да ничего такого потокового магического этот вызов не делает.
Это прям основы винды - кажое окно имеет связанную с ним оконную процедуру...
это конечно да.
но не до конца.

если бы дело было только в виндах, то метод назывался в духе PeekMessageA и размещался бы где-нибудь в WinAPI, рядышком с методом sendMessage

а метод называется yield.

и тут стоит вспомнить что X++ - это расширение языка Java, а исполнитель байт-кода (до CIL) - это калька очень древней Java виртуальной машины.

а в Java метод с названием yield вполне существует в модуле Thread https://docs.oracle.com/javase/7/doc...ng/Thread.html

Цитата:
public static void yield()
A hint to the scheduler that the current thread is willing to yield its current use of a processor. The scheduler is free to ignore this hint.
Yield is a heuristic attempt to improve relative progression between threads that would otherwise over-utilise a CPU. Its use should be combined with detailed profiling and benchmarking to ensure that it actually has the desired effect.

It is rarely appropriate to use this method. It may be useful for debugging or testing purposes, where it may help to reproduce bugs due to race conditions. It may also be useful when designing concurrency control constructs such as the ones in the java.util.concurrent.locks package.
таким образом, yield в аксапте это не только дать подышать оконной функции в виндах, это еще возможность дать подышать самой джаве (выполнить другие потоки, запустить сборщик мусора и прочие кайфушки)

+ https://www.baeldung.com/java-thread-yield
+ https://javarush.ru/quests/lectures/...el07.lecture07

Цитата:
Сообщение от Logger Посмотреть сообщение
Если запустить в аксапте какой то долгий циклический процесс то пока она думает другие открытые окна остаются недоступными. Даже зачастую не перерисовываются нормально.
здесь два момента:
1. другие открытые окна недоступны, поскольку не выполняются служебные потоки в Java, в которых обрабатываются в том числе бизнес-логика аксаптовских контролов и взаимодействие с виндами. так было всегда в аксапте.

2. с некоторой версии windows стала самостоятельно решать, что процесс завис. винда стала по-другому отображать такие окна, ставить специальный статус в таск-менеджере, по-другому выделять память и прочее.

а потом в какой-то следующей версии, винда стала по-другому отрисовывать "зависшие" окна. грубо говоря, выполнялся не метод paint, а отрисовка скриншота зависшего окна.

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

https://superuser.com/questions/9618...not-responding

вот это автоопределение зависов и ломает отрисовку окна.
а yield даёт подышать джаве, а джава в свою очередь даёт подышать виндам.
а подышавшие винды отменяют "kernel panic" и перестает считать клиента аксапты зависшим.

Цитата:
Сообщение от db Посмотреть сообщение
Блин, каким же древним дедом себя чувствую с этими бесполезными знаниями программиста под винду на голом Си
точно! полностью согласен.
https://coub.com/view/2vdi8
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 17.09.2021 в 00:31.
За это сообщение автора поблагодарили: S.Kuskov (10), SRF (2).
Теги
yield

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Axilicious:Propagate infolog messages to the windows event log Blog bot DAX Blogs 0 04.11.2011 10:14
gatesasbait: How to temporarily suppress infolog messages in Dynamics Ax (deux) Blog bot DAX Blogs 7 28.01.2009 17:45
DAX 4.0: infolog & workspaceNum petergunn DAX: Программирование 3 22.01.2009 11:32
Kashperuk Ivan: SysInfoAction class description - Improve your Infolog Blog bot DAX Blogs 0 17.09.2008 03:23
casperkamal: Customizing Infolog through SysInfoAction Blog bot DAX Blogs 0 30.01.2007 20:20

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:27.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.