Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Поведение объектов / 14 сообщений из 14, страница 1 из 1
24.12.2003, 17:37
    #32362422
Гость_xxxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поведение объектов
Привет!
Подскажите ответ на такие вопросы:
1. Как будет вести фокс при одновременном обращении к свойству или запуске метода объекта из других объектов.
2. Как в объекте заиметь ссылку на свойство другого объекта, если
это свойство массив ?
3. Возможно ли производить одновременно поиск в глобальном массиве выполнением 2 методов различных объетов ?

Буду признателен.
...
Рейтинг: 0 / 0
24.12.2003, 17:48
    #32362434
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поведение объектов
Фокс однопоточный, так что одновременно ты ни к чему доступ не получишь, только последовательно .
Ссылку на свойство заиметь невозможно. Можно получить ссылку на объект, и потом обращаться через эту ссылку к свойствам объекта... Можно даже в общем виде, хранить и ссылку на объект и имя сйства, а при обращении склеивать их, например через EVAL() или макро, или ещё как...
WBR, Igor
...
Рейтинг: 0 / 0
24.12.2003, 17:54
    #32362445
Гость_хххх
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поведение объектов
Не есть зер гут.
А если выполнить один и тот же код хотят 2 OLE Server"а при возникновении собития например или по истечениии времени. Ну не важно как, важно то что
одновременно хотят выполнить ? Тож никак ?
...
Рейтинг: 0 / 0
24.12.2003, 18:03
    #32362456
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поведение объектов
Для этого есть понятие очереди. Да и вообще речь изначально не шла про COM сервера. В общем случае запустить несколько потоков можно, и даже их координировать - поищи в нете multithreaded + VFP. Но вот с разделением ресурсов тут тебе фокс уже никак не поможет - только ручками всё...
WBR, Igor
...
Рейтинг: 0 / 0
25.12.2003, 08:06
    #32362686
Flex_хххх
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поведение объектов
Это понятно.
Но вот такая ситуация,
Есть СOM сервер, работающий с портом, как я понимаю код переогруженного
метода может быть выполнен в любой момоент , это соответвует модели СОМ,
так ?
Есть таймер, собитие таймера ведь потоково запускается, хотя и не уверен.
И задача : выполнить из таймера и из СОМ один и тот же метод родителя, но с различными параметрами. И как мне синхронизацию лучше сделать ?
С помощью объектов ядра ?
...
Рейтинг: 0 / 0
26.12.2003, 13:38
    #32364454
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поведение объектов
Flex_ххххЕсть СOM сервер, работающий с портом, как я понимаю код переогруженного метода может быть выполнен в любой момоент , это соответвует модели СОМ, так ?

Тут уж сорри не подскажу :( Нужно очень пристально вчитаться в толстенные книги по COM-у, по его моделям внедрения в хост-процесс и т.п. Более того что за порт ты имеешь в виду? COM-порт? И что за контрол MSComm? Тогда AFAIK ничего параллельного ты всё равно не получишь. Т.е. у самого контрола есть буфер, но если ты загрузишь фокс по плешку (а когда он загружен, он не будет выполнять никаких обработчиков COM-событий), то закончится всё переполнением буфера COM-обёртки над портом и потерей данных...
Flex_ххххЕсть таймер, собитие таймера ведь потоково запускается, хотя и не уверен.
Что значит потоково ? Винда генерирует соответствующие мессаджи и отсылает их обработчику оконной процедуры фокса (тут уж сорри не скажу - обработчику WND_PROC _SCREEN-а или ещё чего). А уж как этот обработчик обслужит/обработает эти мессаджи... В общем при нормальной установке - _VFP.AutoYield = .F. он ничего не станет исполнять из юзерского кода до тех пор, пока сам не перейдёт в состояние ожидания - т.е. не закончит исполнение всех методом и не остановится на READ EVENTS или на Show() модальной формы - тоже своеобразный READ EVENTS.
Flex_ххххИ задача : выполнить из таймера и из СОМ один и тот же метод родителя, но с различными параметрами. И как мне синхронизацию лучше сделать? С помощью объектов ядра ?
Я пока не вижу зачем тебе синхронизация, если всё равно методы выполняются целиком, до своего логического конца (конечно если ты сам ручками там не ставишь циклы с DOEVENTS)... В общем без более подробного описания того что тебе нужно и кода (хотя-бы схематического) говорить сложно.
WBR, Igor
...
Рейтинг: 0 / 0
29.12.2003, 13:54
    #32365907
Гость_xxxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поведение объектов
Подробней так :
Есть оконечное оборудование, которорым рулить я могу системой команд его
протокола, само оборудование мо;ет генерить собития. Это тож байтовые последовательности содержащие код сообщения и параметры-данные.
Оборудование висит на COM - порту. Причем оборудование не 1 , их может и что более вероятно будет, 255. Каждый порт я слушаю объектом на базе
класса Microsoft MSCOMM Control 6.0 и что характероно, все получается, даже паралельная работа перегруженных методов отдельно взятого контрола для отдельно взятого порта. Но тут есть "засада" : при возникновении собития назовем его А, я должен запустить таймер , например на 300 млс. Если первым приходит событие B, а я жду именно его, то таймер сбрасывается, выполняется некоторое дейсвие и опять все повторятяется снова, если же время ожидания собития истекло то я выполняю метод таймера. Тоесть другими словами есть задача создать конечный автомат, с контролем времени пребывания в том или ином состоянии . И вот вопрос в том, как будет вести себя система если код запущенный таймером выполянется , и возникло собите OnCOMM () объета МSCOMM и соответвенно наоборот.
И вообще какие предложения есть ?
Буду признателен.
...
Рейтинг: 0 / 0
09.01.2004, 16:16
    #32371743
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поведение объектов
Гость_xxxxИ вот вопрос в том, как будет вести себя система если код запущенный таймером выполянется , и возникло собите OnCOMM () объета МSCOMM и соответвенно наоборо
Событие поставится в очеребь и начнёт исполнятся только после завершения исполнения текущего кода (если текущий код исполняется очень долго, то в очередь могут поставится не 1 событие а много - и потом они станут исполнятся один за одним...) Это всё конечно при правильном
Код: plaintext
_VFP.AutoYield = .F.
Иначе может получится нехорошая мешанина...
Т.е. если я правильно понял, то у тебя всё будет очень просто - Timer.Timer сработает только когда нужно выполнить действие, и не сработает, если его reset-нули/перезапустили до истечения интервала из OnComm... Т.е. просто ресет таймера помести как можно раньше в OnComm и всё...
WBR, Igor
...
Рейтинг: 0 / 0
12.01.2004, 11:12
    #32372799
Гость_xxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поведение объектов
Тут не так все просто.
Состояние - это битовая маска совокупности состояний системы.
При одних собития mscomm я должен тормозить таймер, при других нет.
А как с выполнением метода самого таймера ? Его тож в очередь фокс поставит если событие MSCOMM OnCOmm() выполняется на участке истечения времени ?
...
Рейтинг: 0 / 0
13.01.2004, 14:58
    #32374522
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поведение объектов
Гость_xxxА как с выполнением метода самого таймера ? Его тож в очередь фокс поставит если событие MSCOMM OnCOmm() выполняется на участке истечения времени
Да поставит в очередь. Причём может поставить не 1 событие а много - если фокс будет занят исполнением OnComm скажем 10 секунд а интервал таймера - 1 секунда, то по завершении OnComm подряд начнёт срабатывать Timer.Timer - без всяких интервалов , пока не отработают все 10 накопленных событий из очереди. Чтобы это избежать часто таймер приостанавливают на момент отработки события Timer (это в случае возможного длительного срабатываания самого обработчика Timer), и даже ресетят...
То что у тебя битовая маска - ситуацию никак не меняет - просто чуть сложнее будет выглядеть условие...

WBR, Igor
...
Рейтинг: 0 / 0
14.01.2004, 14:56
    #32375816
Гость_xxxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поведение объектов
А если из FLL установить калбак функцию функцией API SetTimer , как будет обстоять дело с асинхронностью в этом случае ? дернятся она внезависмотси от того занят фокс чем-то другим или нет ?
...
Рейтинг: 0 / 0
14.01.2004, 15:36
    #32375889
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поведение объектов
Ну начнём с того, что ежели явно не создавать новый поток, то всё-равно пока фокс не освободится, ничего не будет AFAIK.
А вот что касается попытки из созданного в fll отдельного потока снова вызвать через FoxAPI твой фоксовый код - то будет глюкъ, вплоть до С005.
Вот если ты нарисуешь полностью обработку в этом отдельном потоке, а в основной только результат передавать будешь (а этот результат поступит в фоксовый код опять же когда никакой другой код исполняться не будет) - тогда возможно и получится... Кстати через специальный хитрый COM можно запускать в фоксе-же сделанную COM-компоненту - см. подробности на
http://www.geocities.com/rremus/multithreaded_vfp.htm

WBR, Igor
...
Рейтинг: 0 / 0
14.01.2004, 15:45
    #32375914
Гость_xxxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поведение объектов
А если защитить выполнение кода фокса и библы критическими секциями ?
...
Рейтинг: 0 / 0
14.01.2004, 16:44
    #32376053
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поведение объектов
Не знаю. Это уже за рамками моей компетенции. Попробуй, может чего и выйдет...

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


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