Диспетчеризация события прерывают функцию?

Одна из причин продолжения использовать капитализацию - (или кто-то еще) при просмотре кода в чем-то как блокнот это помогает читать. т.е. можно дифференцироваться легко между "ключевыми словами" и именами таблиц, SP, udf's и т.д.

5
задан Esteban Küber 25 August 2009 в 15:31
поделиться

2 ответа

Нет, foo () не будет прерван.

Flex is однопоточный, поэтому foo () продолжит работу. После завершения работы foo () и возврата управления в цикл обработки событий будет обработано первое событие в очереди событий.

5
ответ дан 14 December 2019 в 13:43
поделиться

Это действительно может быть вроде как

Я действительно не знаю, как в этом отношении работает Flash, но, например, в C # есть несколько случаев. Я предлагаю вам прочитать, как это работает. Также хорошо включить отладчик и изучить стек, который привел к вашему обработчику событий, чтобы понять его.

По сути, происходит один из двух сценариев:

  1. Как говорит Dr_Asik, вы могли бы напрямую вызвать делегировать мероприятие, что в точности похоже на синхронный вызов метода. В этом случае применяются обычные правила переключения контекста потоков, но на самом деле событие не имеет особых свойств. Это просто вызов функции.

  2. Вы могли бы говорить о событиях UI Forms. В этом случае действуют некоторые особые правила. Событие пользовательского интерфейса «отправляется» в очередь событий, а не выполняется синхронно. Итак, если foo () находится в «основном» потоке пользовательского интерфейса, тогда пользователь нажимает клавишу во время работы foo (), тогда нажатие клавиши перехватывается ОС и отправляется в очередь событий пользовательского интерфейса приложения. Но foo () уже запущен, поэтому основной поток не будет останавливаться и проверять эту очередь. Только после того, как весь стек вызовов foo () завершится полностью до цикла проверки очереди сообщений, основной поток найдет это сообщение, обработает его и вызовет свой обработчик.

Чтобы было ясно, в этом последнем случае foo () гарантированно не будет прервана событием пользовательского интерфейса.

Однако в случае 2 существует другой сценарий, когда foo () не находится в основном потоке пользовательского интерфейса. В этом случае его можно полностью прервать обычным переключением контекста.

В C # это может стать еще сложнее, если вы начнете использовать Control.Invoke ().

Это не зависит от Flash, но я надеюсь, что это поможет . Я подозреваю, что у Flash есть основной поток с очередью событий и циклом обработки, как и в C #. Это обычная модель, которую вы найдете по крайней мере в C #, Java и Delphi.

В C # это может стать еще сложнее, если вы начнете использовать Control.Invoke ().

Это не зависит от Flash, но я надеюсь, что это поможет. Я подозреваю, что у Flash есть основной поток с очередью событий и циклом обработки, как и в C #. Это обычная модель, которую вы найдете по крайней мере в C #, Java и Delphi.

В C # это может стать еще сложнее, если вы начнете использовать Control.Invoke ().

Это не зависит от Flash, но я надеюсь, что это поможет. Я подозреваю, что у Flash есть основной поток с очередью событий и циклом обработки, как и в C #. Это обычная модель, которую вы найдете по крайней мере в C #, Java и Delphi.

1
ответ дан 14 December 2019 в 13:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: