Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Вопрос про таймер / 10 сообщений из 10, страница 1 из 1
02.11.2008, 17:50
    #35631611
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про таймер
Привет всем!

Есть такая задача. В приложении нужно периодически скажем раз в минуту выполнять некий запрос, и при определенном результате выполнения запроса сигнализировать о проблеме.
Пришло такое решение. Добавляем еще одну кнопку в главное меню приложения. Периодически по таймеру вызываем в отдельном потоке выполнение запроса. Результат возвращаем в НЕЧТО, где при необходимости меняем или цвет кнопки, или картинку на кнопке (второй вариант предпочтительней).
Так вот! Возник вопрос - а как же этот самый таймер реализовать? Была идея в качестве объекта-локатора выбрать объект, унаследованный от application manager - наследник pfc_n_cst_appmanager. Там же и как-то привязать таймер. Но вот посмотрел хелп - пишут, что таймер есть только у окна приложения. К окну как-бы привязываться не хочется... А как жеж быть?? Кто может подсказать - как периодически выполнять некие действия в приложении на ПБ?

Впринципе наверное можно было бы открыть какое-то невидимое окно, и на него повесить таймер... Но может правильней по-другому?
...
Рейтинг: 0 / 0
02.11.2008, 20:18
    #35631678
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про таймер
RTFM Timing object.

PB9 ManualTiming is a nonvisual system object that can be used when a Timer event cannot be associated with a window. To use a timing object, create a standard class user object that inherits from the Timing system class, and then create an instance of the inherited timing object.
...
Рейтинг: 0 / 0
02.11.2008, 20:18
    #35631679
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про таймер
Я такое делал, результат дейтствий отдельного потока менял иконку (и ToolBarItemText) на кнопке тулбара MDI Frama.
C timerом всё очень просто, есть же системный объект timing, от которго наследоваться можно.
А про потоки я тут полный implementation постал...
...
Рейтинг: 0 / 0
03.11.2008, 10:56
    #35632053
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про таймер
/topic/362331&pg=1#3403750
...
Рейтинг: 0 / 0
04.11.2008, 21:21
    #35633838
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про таймер
Мда. Ларчик, как говорится, просто открывался :) Не дочитал...

Но вот наткнулся на одну неприятность.
А как мне в процедуру обработки передать объект транзакций? Чтоб в отдельном потоке выполнялся запрос, а потом его результат можно было передать в основной поток?
Когда делаю вот так:
Код: plaintext
1.
2.
sharedobjectget("shared_error_publicator", lnsrv_errPub)
lnsrv_errPub.post of_run(itr_errTrans, icst_locator)
возникает ошибка:
PowerBuilderApplication terminated.

Error: Object passed to shared/remote object method is not a nonvisual user object at line... bla-bla-bla

когда же вызов выполняю так:
Код: plaintext
1.
sharedobjectget("shared_error_publicator", lnsrv_errPub)
lnsrv_errPub.post of_run(icst_locator)
то все проходит нормально...
И действительно -
Код: plaintext
itr_errTrans
унаследован не от нон-вижуал обжекта, а наследник объекта
Код: plaintext
transaction
. Возникает вопрос - как же??
Единственная мысль, которая приходит - постоянно в потоке открывать/закрывать объект транзакций...
Или... Создать объект-контейнер для объекта транзакций??
...
Рейтинг: 0 / 0
04.11.2008, 21:48
    #35633857
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про таймер
какой-то идиотизьм :(
Вобщем, с контейнером для объекта транзакций конечно же все прокатило... Но... Почему-то не выполняется запрос :(
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
long ll_cnt, ll_rc
n_tr ltr_tr

ltr_tr = atr_tr.itr_tr
ll_rc = ltr_tr.of_connect()
if ll_rc < 0  then MessageBox("cant connect",'cant connect')
if ltr_tr.of_isConnected() then 
	MessageBox("connected",'connected')
else 
	MessageBox("cant connect",'cant connect2')
end if
setNull(ll_cnt)
try
	select pg_mypg.f_test
	  into :ll_cnt
	  from dual
	 using ltr_tr;
finally
	if isNull(ll_cnt) then ll_cnt =  1 
	MessageBox(String(atr_tr.itr_tr.SQLCode), atr_tr.itr_tr.SQLErrText)
	ltr_tr.of_disconnect()
end try

aw_locator.event ue_updateErrList(ll_cnt)

return  1 

Так вот! Эта зараза блин выдает сначала connected, а потом после выполнения запроса (который заканчивается ошибкой) в объекте транзакций находится сообщение об ошибке - transaction not connected... Что бы это могло быть??? Не пойму никак...
...
Рейтинг: 0 / 0
04.11.2008, 21:50
    #35633860
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про таймер
причем, чтоб предвосхитить возможные уточняющие вопросы, скажу, что запрос
Код: plaintext
1.
2.
select  1 
  into ll_cnt
  from dual;
так же не выполняется... Воооооооооооот!

ПС: подключаюсь к Ораклу - и там есть системная таблица dual с одной строкой и одним столбцом с определенным значением. Доступна всем...
...
Рейтинг: 0 / 0
05.11.2008, 00:45
    #35633976
18-я весна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про таймер
В каждом потоке надо создавать и соединять свой объект транзакции
...
Рейтинг: 0 / 0
05.11.2008, 09:52
    #35634237
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про таймер
Хм... Ну я вроде как соединяю в каждом потоке, но не создаю... Что ж, попробую еще и создавать :)
...
Рейтинг: 0 / 0
05.11.2008, 10:16
    #35634296
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про таймер
УРРРААА!!! 18-я весня - громаднейшее спасибо!!
Вот как раз до создания объекта транзакций внутри зашаренного объекта я так и не додумался :( До того, чтоб коннектиться именно внутри - было... Но до создания так и не дошел. Были мысли для тестов внутри забить коннекшн с предопределенными параметрами... Но это не круто.

ПС: может кому пригодится - натолкнулся еще на один прикол: при обращении к методам глобальных объектов из зашаренного объекта поток уходит в себя и не возвращается... Успешно обошел :)

Вобщем, всем спасибо! Вроде бы проблему поборол.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Вопрос про таймер / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]