Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как использовать асинхронные методы DCOM-сервера из Foxpro 9 / 14 сообщений из 14, страница 1 из 1
28.02.2013, 18:29
    #38170065
Rostislav D. Kudryashov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
Асинхронность достигается простым приёмом. "Асинхроный" метод сервера сохраняет параметры вызова в свойствах сервера, запускает Timer и даёт return в вызвавший его клиент. А Timer через секунду запускает исполняющий внутренний метод и самоликвидируется. Теперь Фоксовский клиент может следить и управлять ходом асинхронного метода, периодически опрашивая текущие свойства сервера и устанавливая в сервере "флаги", также периодически проверяемые асинхронным методом.
А нельзя ли получать из сервера какие-то обратные вызовы?
Только учтите, сервер удалённый и доступ к нему из клиента через CREATEOBJECTEX().
...
Рейтинг: 0 / 0
28.02.2013, 18:59
    #38170108
Rostislav D. Kudryashov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
Rostislav D. Kudryashov, уточню. DCOM-сервер - изготовлен в Фоксе как exe-файл.
...
Рейтинг: 0 / 0
28.02.2013, 19:19
    #38170141
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
Rostislav D. KudryashovRostislav D. Kudryashov, уточню. DCOM-сервер - изготовлен в Фоксе как exe-файл.
Тогда Вы что-то не договариваете.

Сам по себе FoxPro - однопоточное приложение. Поэтому "Timer (...) запускает (...) метод и самоликвидируется" - не выполнимо в среде FoxPro. Timer будет висеть до тех пор, пока будет выполняться запущенный им метод. А это значит, что Timer не сможет "самоликвидироваться".

Если требуется выполнение какого-то процесса "паралельно" основному приложению FoxPro, то просто запускается через через RUN или ShellExecute отдельный EXE. Получим независимый процесс. Но, разумеется, прямой связи основного приложения с этим процессом уже не будет. Только через внешние объекты (файлы или объекты-семафоры вроде Mutex)
...
Рейтинг: 0 / 0
28.02.2013, 19:22
    #38170146
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
Описанный сценарий не приводит к асинхронности. Он всего-лишь меняет последовательность выполнения методов. Основное приложение будет ожидать завершение работы метода не в момент его вызова, а в тот момент, когда начнет выполняться событие таймера.
...
Рейтинг: 0 / 0
28.02.2013, 19:27
    #38170150
Rostislav D. Kudryashov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
ВладимирМ, как это тебя угораздило не заметить, что прямая связь из клиента с DCOM-сервером, в котором клиент запустил "асинхронный" метод у меня уже есть!
Меня интересуют способы обратной связи - обратные вызовы из "асинхронного" метода в запустивший его клиентю
...
Рейтинг: 0 / 0
28.02.2013, 19:34
    #38170158
Rostislav D. Kudryashov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
ВладимирМ, э--э-э-х, Владимир. Ну ты же должен понимать, что такое DCOM-сервер, который выполняется не то что в другом потоке, а на другом компьютере, нежели клиент? При том, что клиент, вызвавший "асинхронный" метод, получает возврат из сервера практически немедленно и у него развязаны руки для любых дел, в том числе и для управления ходом выполнения асинхронного метода путем чтения-установки флагов в сервере. А метод, запущенный из Таймера на сервере, ещё будет долго пилить, и хорошо б от него получать обратные вызовы.
...
Рейтинг: 0 / 0
28.02.2013, 19:52
    #38170173
Rostislav D. Kudryashov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
Rostislav D. Kudryashov, ладно, ребята. Меня здесь не поняли всякие Владимиры. Для них кидаю код сервера. Может, есть кто кроме Владимиров, чего понимающий?

DEFINE CLASS ServerTimerClass as Custom OLEPUBLIC
CurDial = NULL
IdleTimer = NULL

PROCEDURE Init
THIS.CurDial = CREATEOBJECT ('Dial')
THIS.IdleTimer = CREATEOBJECT ('MyTimer', 1000, .T., THIS.CurDial)
ENDPROC && Init

ENDDEFINE && ServerTimerClass

DEFINE CLASS Dial AS Custom
Face = 'NoValue'
ENDDEFINE && Dial

DEFINE CLASS MyTimer AS Timer
Dial = NULL

PROCEDURE Init (m.tnInterval, m.tlEnabled, m.toDial)
THIS.Interval = m.tnInterval
THIS.Enabled = m.tlEnabled
THIS.Dial = m.toDial
ENDPROC && Init

PROCEDURE Timer
THIS.Dial.Face = TIME()
ENDPROC && Timer

ENDDEFINE && MyTimer
...
Рейтинг: 0 / 0
28.02.2013, 20:17
    #38170198
Rostislav D. Kudryashov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
Rostislav D. Kudryashov, ага, в хэлпе есть раздел "Visual FoxPro and Advanced COM" и в нём "Visual FoxPro Callback Design".
Надо сейчас попробовать
...
Рейтинг: 0 / 0
28.02.2013, 20:20
    #38170200
Rostislav D. Kudryashov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
Rostislav D. Kudryashov, Э,наверно не пойдёт. Этот пример из хэлпа для COM-DLL, а не для COM-EXE.
...
Рейтинг: 0 / 0
28.02.2013, 20:30
    #38170215
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
Rostislav D. KudryashovRostislav D. Kudryashov, Э,наверно не пойдёт. Этот пример из хэлпа для COM-DLL, а не для COM-EXE.
Почему не пойдет? Хоть и DLL но outprocess COM сервер. inprocess фокс не может делать. поэтому без разницы EXE или DLL.
А COM или DCOM это забота виндовса, для приложения они идентичны.
...
Рейтинг: 0 / 0
28.02.2013, 20:33
    #38170224
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
DCOM достаточно ресурсоемкая технология. Не проще сделать TCP соединение и по нему обращаться?
...
Рейтинг: 0 / 0
28.02.2013, 21:00
    #38170237
Rostislav D. Kudryashov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
Dima T, Dima T, мне хочется обойтись без сериализации данных по TCP. Если проще - то всё писать под .NET, на WCF
...
Рейтинг: 0 / 0
28.02.2013, 21:02
    #38170238
Rostislav D. Kudryashov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
Dima T, а пока что это решение - замена прямому файловому доступу с рабочих станций к таблицам в сетевом каталоге.
Надеюсь, что DCOM-сервер будет не "тяжелее". По крайней мере, на сетевом трафике будет выигрыш
...
Рейтинг: 0 / 0
28.02.2013, 21:24
    #38170253
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
Rostislav D. KudryashovDima T, а пока что это решение - замена прямому файловому доступу с рабочих станций к таблицам в сетевом каталоге.
Надеюсь, что DCOM-сервер будет не "тяжелее". По крайней мере, на сетевом трафике будет выигрыш
Пытаешься клиент-серверное приложение сделать? Может просто SQL сервер взять? Все равно с нуля писать.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как использовать асинхронные методы DCOM-сервера из Foxpro 9 / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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