|
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
|
|||
---|---|---|---|
#18+
Асинхронность достигается простым приёмом. "Асинхроный" метод сервера сохраняет параметры вызова в свойствах сервера, запускает Timer и даёт return в вызвавший его клиент. А Timer через секунду запускает исполняющий внутренний метод и самоликвидируется. Теперь Фоксовский клиент может следить и управлять ходом асинхронного метода, периодически опрашивая текущие свойства сервера и устанавливая в сервере "флаги", также периодически проверяемые асинхронным методом. А нельзя ли получать из сервера какие-то обратные вызовы? Только учтите, сервер удалённый и доступ к нему из клиента через CREATEOBJECTEX(). ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 18:29 |
|
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
|
|||
---|---|---|---|
#18+
Rostislav D. Kudryashov, уточню. DCOM-сервер - изготовлен в Фоксе как exe-файл. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 18:59 |
|
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
|
|||
---|---|---|---|
#18+
Rostislav D. KudryashovRostislav D. Kudryashov, уточню. DCOM-сервер - изготовлен в Фоксе как exe-файл. Тогда Вы что-то не договариваете. Сам по себе FoxPro - однопоточное приложение. Поэтому "Timer (...) запускает (...) метод и самоликвидируется" - не выполнимо в среде FoxPro. Timer будет висеть до тех пор, пока будет выполняться запущенный им метод. А это значит, что Timer не сможет "самоликвидироваться". Если требуется выполнение какого-то процесса "паралельно" основному приложению FoxPro, то просто запускается через через RUN или ShellExecute отдельный EXE. Получим независимый процесс. Но, разумеется, прямой связи основного приложения с этим процессом уже не будет. Только через внешние объекты (файлы или объекты-семафоры вроде Mutex) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 19:19 |
|
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
|
|||
---|---|---|---|
#18+
Описанный сценарий не приводит к асинхронности. Он всего-лишь меняет последовательность выполнения методов. Основное приложение будет ожидать завершение работы метода не в момент его вызова, а в тот момент, когда начнет выполняться событие таймера. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 19:22 |
|
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
|
|||
---|---|---|---|
#18+
ВладимирМ, как это тебя угораздило не заметить, что прямая связь из клиента с DCOM-сервером, в котором клиент запустил "асинхронный" метод у меня уже есть! Меня интересуют способы обратной связи - обратные вызовы из "асинхронного" метода в запустивший его клиентю ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 19:27 |
|
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
|
|||
---|---|---|---|
#18+
ВладимирМ, э--э-э-х, Владимир. Ну ты же должен понимать, что такое DCOM-сервер, который выполняется не то что в другом потоке, а на другом компьютере, нежели клиент? При том, что клиент, вызвавший "асинхронный" метод, получает возврат из сервера практически немедленно и у него развязаны руки для любых дел, в том числе и для управления ходом выполнения асинхронного метода путем чтения-установки флагов в сервере. А метод, запущенный из Таймера на сервере, ещё будет долго пилить, и хорошо б от него получать обратные вызовы. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 19:34 |
|
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 19:52 |
|
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
|
|||
---|---|---|---|
#18+
Rostislav D. Kudryashov, ага, в хэлпе есть раздел "Visual FoxPro and Advanced COM" и в нём "Visual FoxPro Callback Design". Надо сейчас попробовать ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 20:17 |
|
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
|
|||
---|---|---|---|
#18+
Rostislav D. Kudryashov, Э,наверно не пойдёт. Этот пример из хэлпа для COM-DLL, а не для COM-EXE. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 20:20 |
|
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
|
|||
---|---|---|---|
#18+
Rostislav D. KudryashovRostislav D. Kudryashov, Э,наверно не пойдёт. Этот пример из хэлпа для COM-DLL, а не для COM-EXE. Почему не пойдет? Хоть и DLL но outprocess COM сервер. inprocess фокс не может делать. поэтому без разницы EXE или DLL. А COM или DCOM это забота виндовса, для приложения они идентичны. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 20:30 |
|
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
|
|||
---|---|---|---|
#18+
DCOM достаточно ресурсоемкая технология. Не проще сделать TCP соединение и по нему обращаться? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 20:33 |
|
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
|
|||
---|---|---|---|
#18+
Dima T, Dima T, мне хочется обойтись без сериализации данных по TCP. Если проще - то всё писать под .NET, на WCF ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 21:00 |
|
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
|
|||
---|---|---|---|
#18+
Dima T, а пока что это решение - замена прямому файловому доступу с рабочих станций к таблицам в сетевом каталоге. Надеюсь, что DCOM-сервер будет не "тяжелее". По крайней мере, на сетевом трафике будет выигрыш ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 21:02 |
|
Как использовать асинхронные методы DCOM-сервера из Foxpro 9
|
|||
---|---|---|---|
#18+
Rostislav D. KudryashovDima T, а пока что это решение - замена прямому файловому доступу с рабочих станций к таблицам в сетевом каталоге. Надеюсь, что DCOM-сервер будет не "тяжелее". По крайней мере, на сетевом трафике будет выигрыш Пытаешься клиент-серверное приложение сделать? Может просто SQL сервер взять? Все равно с нуля писать. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 21:24 |
|
|
start [/forum/topic.php?fid=41&msg=38170146&tid=1583139]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 269ms |
total: | 411ms |
0 / 0 |