Показать сообщение отдельно
Старый 17.09.2021, 00:27   #6  
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).