> -- Илья Ермаков писал(а):
> Здравствуйте!Попробую по порядку ответить на вопросы По поводу примера - не совсем понятно, к чему там создание окна, ведь оно нигде не используется - просто из старого примера "перекочевало", наверное?Многопоточность через WinApi.CreateThread использовать нельзя ни в коем случае. ББ - среда со сложным рантаймом, и такое использование рано или поздно приведет к краху, например, в момент сборки мусора (когда структура памяти временно нецелостна, но поток-то ничего об этом не знает...).В обычной версии ББ многопоточности нет в принципе. В Active BlackBox нужно использовать либо активные процедуры, либо низкоуровневую оболочку для CreateThread - Kernel.cCreateTask, которая корректно зарегистрирует поток в ядре.И то - прежде чем вызывать из параллельного потока Views.Update, нужно будет выполнить блокировку Synch.BeginOberonSafe (как в Delphi VCL используется Synchronize).По поводу обновления - Views.Update не производит перерисовки экрана, а всего лишь ставит отображение в очередь отложенной перерисовки. Перерисовка выполняется почти сразу, но все равно отложенно. Ее выполняет главный поток среды. Естественно, что от введения многопоточности поведение обновления экрана не изменилось.Почему меню и перетаскивание замораживают обновление - отдельный вопрос. Нужно смотреть, как это реализовано в HostMenus и HostWindows.

1.Если Вы посмотрите как реализован Synchronize в Dephi 2.0, то он как раз реализован через скрытое окно и SendMessage. Что как раз и сделано в данном примере. Поэтому и создается скрытое окно.
Что позволяет синхронизировать основной поток программы и вторичный.

2.Я понимаю, что Views.Update лишь ставит отображение в очередь отложенной перерисовки. Ну, она по идее и должна выскакивать из нее немедленно: поставило в очередь сообщение "отрисовать данный объект". А когда обработчик дойдет до данного сообщения
объект и перересуется. А тут выходит, что в момент нахождения в меню или при перетаскивании за заголовок очередь сообщений обрабатывает только действия от мыши и действия в меню.
Что есть не хорошо.

3. По поводу Synch.BeginOberonSafe и Synch.EndOberonSafe.
Ставил я их. Эффект такой: мышью не двигаешь кубик крутится медленно, если двигать мышью быстро то и скорость вращения возрастает.

4. Active BlackBox я еще пока не пробовал. Я только-только начал разбираться с Blackbox. Но я подозреваю,  что если очередь обработки сообщений реализована не очень хорошо, то когда вам надо что-бы параллельный поток рисовал что-то на экране (например, график) не зависимо от того в меню вы сейчас находитесь или нет. У вас  этого не получится. И вообще все остановится как только вы нажали alt и случайно попали в меню. Я думаю с Active BlackBox будет то же самое.