Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PowerBuilder Новый топик    Ответить
 Работа оконного интерфейса  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
Непонятным образом отрабатывает оконный интерфейс, хотя не должен...
Ситуация такая - есть OLE компонент, в нем некие функции которые работают ну например 0.1 секунду каждая. Делаем userobject на основе этого ole контрола b и размещаем его на окне. Затем вызываем несколько десятков раз функции этого ole объекта (на кнопке пишем скрипт) так, что они отрабатывают в сумме в течении нескольких секунд и после этого выводим MessageBox. Но! интерфейс при этом работает - т.е. мы можем нажать еще раз на кнопку, закрыть окно подвигать его и т.д. А MessageBox выводится в самом конце обработки - т.е. потаскали окно, а затем он всплывает.Собственно вопрос - почему это так?
12 сен 08, 12:28    [6178108]     Ответить | Цитировать Сообщить модератору
 Re: Работа оконного интерфейса  [new]
ЗоринАндрей
Member

Откуда: Санкт-Петербург
Сообщений: 3004
Локшин Марк
Непонятным образом отрабатывает оконный интерфейс, хотя не должен...
Ситуация такая - есть OLE компонент, в нем некие функции которые работают ну например 0.1 секунду каждая. Делаем userobject на основе этого ole контрола b и размещаем его на окне. Затем вызываем несколько десятков раз функции этого ole объекта (на кнопке пишем скрипт) так, что они отрабатывают в сумме в течении нескольких секунд и после этого выводим MessageBox. Но! интерфейс при этом работает - т.е. мы можем нажать еще раз на кнопку, закрыть окно подвигать его и т.д. А MessageBox выводится в самом конце обработки - т.е. потаскали окно, а затем он всплывает.Собственно вопрос - почему это так?

вероятно где-то внутри ole есть код аналогичный Yield()
что то типа ProcessWindowMessages или как он там в API называется.
12 сен 08, 20:28    [6180686]     Ответить | Цитировать Сообщить модератору
 Re: Работа оконного интерфейса  [new]
AIS
Member

Откуда:
Сообщений: 1695
ЗоринАндрей
вероятно где-то внутри ole есть код аналогичный Yield() ...

Вряд ли это так. Ведь функция ole запускается раньше, чем начинают "манипуляции с окном". В этом случае скорее окно должно ждать завершения выполнения функции ole, а не на обоброт.
Локшин Марк

Мне кажется, что это обыкновенная иерархия (приоритет, очередность) событий.
Например, как сначало обрабатывается событие родителя, а потом потомка. Думаю, здесь что-то подобное, т.е. событие userobject на основе этого OLE включается в конце, либо может завершить свой процесс только после события объекта с более высоким приоритетом. А объект с более высоким приоритетом может вставить своё событие между очередным шагом цикла выполнения функций OLE, и OLE приходится ждать пока это событие завершиться и только потом продолжить цикл.
12 сен 08, 23:50    [6180951]     Ответить | Цитировать Сообщить модератору
 Re: Работа оконного интерфейса  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
ЗоринАндрей
вероятно где-то внутри ole есть код аналогичный Yield()
что то типа ProcessWindowMessages или как он там в API называется.

Хм, это вариант. Нужно будет допросить автора .
AIS
Например, как сначало обрабатывается событие родителя, а потом потомка. Думаю, здесь что-то подобное, т.е. событие userobject на основе этого OLE включается в конце, либо может завершить свой процесс только после события объекта с более высоким приоритетом. А объект с более высоким приоритетом может вставить своё событие между очередным шагом цикла выполнения функций OLE, и OLE приходится ждать пока это событие завершиться и только потом продолжить цикл

Оно точно начинает исполняться (код в OLE) сразу после нажатия на кнопку. Причем если я нажму кнопку второй раз (до завершения исполнения первого раза) то код на скрипте на событии clicked начнет выполняться заново, а первое исполнение кода прервется в момент второго нажатия и больше не возобновляется.
15 сен 08, 09:22    [6183814]     Ответить | Цитировать Сообщить модератору
 Re: Работа оконного интерфейса  [new]
AIZ
Member

Откуда: Ташкент, ASBT
Сообщений: 374
А вот кнопочку, наверное, надо блокировать сразу после нажатия. Это как в артиллерии - механизм предохранения от двойного заряжания.
16 сен 08, 10:21    [6188733]     Ответить | Цитировать Сообщить модератору
 Re: Работа оконного интерфейса  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
AIZ
А вот кнопочку, наверное, надо блокировать сразу после нажатия. Это как в артиллерии - механизм предохранения от двойного заряжания.

Это не так просто как кажется, т.к. в программе вся логика на хранимых процедурах реализована и с подобного рода блокированием будут проблемы...
16 сен 08, 10:57    [6188938]     Ответить | Цитировать Сообщить модератору
 Re: Работа оконного интерфейса  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
ЗоринАндрей
вероятно где-то внутри ole есть код аналогичный Yield()
что то типа ProcessWindowMessages или как он там в API называется.

Именно так оно и было, хотя OLE-компонент вообще не имеет видимого пользовательского интерфейса, поэтому что-то в этом направлении не подумалось...
16 сен 08, 16:50    [6191774]     Ответить | Цитировать Сообщить модератору
Все форумы / PowerBuilder Ответить