Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Поведение объектов
|
|||
|---|---|---|---|
|
#18+
Привет! Подскажите ответ на такие вопросы: 1. Как будет вести фокс при одновременном обращении к свойству или запуске метода объекта из других объектов. 2. Как в объекте заиметь ссылку на свойство другого объекта, если это свойство массив ? 3. Возможно ли производить одновременно поиск в глобальном массиве выполнением 2 методов различных объетов ? Буду признателен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2003, 17:37 |
|
||
|
Поведение объектов
|
|||
|---|---|---|---|
|
#18+
Фокс однопоточный, так что одновременно ты ни к чему доступ не получишь, только последовательно . Ссылку на свойство заиметь невозможно. Можно получить ссылку на объект, и потом обращаться через эту ссылку к свойствам объекта... Можно даже в общем виде, хранить и ссылку на объект и имя сйства, а при обращении склеивать их, например через EVAL() или макро, или ещё как... WBR, Igor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2003, 17:48 |
|
||
|
Поведение объектов
|
|||
|---|---|---|---|
|
#18+
Не есть зер гут. А если выполнить один и тот же код хотят 2 OLE Server"а при возникновении собития например или по истечениии времени. Ну не важно как, важно то что одновременно хотят выполнить ? Тож никак ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2003, 17:54 |
|
||
|
Поведение объектов
|
|||
|---|---|---|---|
|
#18+
Для этого есть понятие очереди. Да и вообще речь изначально не шла про COM сервера. В общем случае запустить несколько потоков можно, и даже их координировать - поищи в нете multithreaded + VFP. Но вот с разделением ресурсов тут тебе фокс уже никак не поможет - только ручками всё... WBR, Igor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2003, 18:03 |
|
||
|
Поведение объектов
|
|||
|---|---|---|---|
|
#18+
Это понятно. Но вот такая ситуация, Есть СOM сервер, работающий с портом, как я понимаю код переогруженного метода может быть выполнен в любой момоент , это соответвует модели СОМ, так ? Есть таймер, собитие таймера ведь потоково запускается, хотя и не уверен. И задача : выполнить из таймера и из СОМ один и тот же метод родителя, но с различными параметрами. И как мне синхронизацию лучше сделать ? С помощью объектов ядра ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2003, 08:06 |
|
||
|
Поведение объектов
|
|||
|---|---|---|---|
|
#18+
Flex_ххххЕсть СOM сервер, работающий с портом, как я понимаю код переогруженного метода может быть выполнен в любой момоент , это соответвует модели СОМ, так ? Тут уж сорри не подскажу :( Нужно очень пристально вчитаться в толстенные книги по COM-у, по его моделям внедрения в хост-процесс и т.п. Более того что за порт ты имеешь в виду? COM-порт? И что за контрол MSComm? Тогда AFAIK ничего параллельного ты всё равно не получишь. Т.е. у самого контрола есть буфер, но если ты загрузишь фокс по плешку (а когда он загружен, он не будет выполнять никаких обработчиков COM-событий), то закончится всё переполнением буфера COM-обёртки над портом и потерей данных... Flex_ххххЕсть таймер, собитие таймера ведь потоково запускается, хотя и не уверен. Что значит потоково ? Винда генерирует соответствующие мессаджи и отсылает их обработчику оконной процедуры фокса (тут уж сорри не скажу - обработчику WND_PROC _SCREEN-а или ещё чего). А уж как этот обработчик обслужит/обработает эти мессаджи... В общем при нормальной установке - _VFP.AutoYield = .F. он ничего не станет исполнять из юзерского кода до тех пор, пока сам не перейдёт в состояние ожидания - т.е. не закончит исполнение всех методом и не остановится на READ EVENTS или на Show() модальной формы - тоже своеобразный READ EVENTS. Flex_ххххИ задача : выполнить из таймера и из СОМ один и тот же метод родителя, но с различными параметрами. И как мне синхронизацию лучше сделать? С помощью объектов ядра ? Я пока не вижу зачем тебе синхронизация, если всё равно методы выполняются целиком, до своего логического конца (конечно если ты сам ручками там не ставишь циклы с DOEVENTS)... В общем без более подробного описания того что тебе нужно и кода (хотя-бы схематического) говорить сложно. WBR, Igor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2003, 13:38 |
|
||
|
Поведение объектов
|
|||
|---|---|---|---|
|
#18+
Подробней так : Есть оконечное оборудование, которорым рулить я могу системой команд его протокола, само оборудование мо;ет генерить собития. Это тож байтовые последовательности содержащие код сообщения и параметры-данные. Оборудование висит на COM - порту. Причем оборудование не 1 , их может и что более вероятно будет, 255. Каждый порт я слушаю объектом на базе класса Microsoft MSCOMM Control 6.0 и что характероно, все получается, даже паралельная работа перегруженных методов отдельно взятого контрола для отдельно взятого порта. Но тут есть "засада" : при возникновении собития назовем его А, я должен запустить таймер , например на 300 млс. Если первым приходит событие B, а я жду именно его, то таймер сбрасывается, выполняется некоторое дейсвие и опять все повторятяется снова, если же время ожидания собития истекло то я выполняю метод таймера. Тоесть другими словами есть задача создать конечный автомат, с контролем времени пребывания в том или ином состоянии . И вот вопрос в том, как будет вести себя система если код запущенный таймером выполянется , и возникло собите OnCOMM () объета МSCOMM и соответвенно наоборот. И вообще какие предложения есть ? Буду признателен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2003, 13:54 |
|
||
|
Поведение объектов
|
|||
|---|---|---|---|
|
#18+
Гость_xxxxИ вот вопрос в том, как будет вести себя система если код запущенный таймером выполянется , и возникло собите OnCOMM () объета МSCOMM и соответвенно наоборо Событие поставится в очеребь и начнёт исполнятся только после завершения исполнения текущего кода (если текущий код исполняется очень долго, то в очередь могут поставится не 1 событие а много - и потом они станут исполнятся один за одним...) Это всё конечно при правильном Код: plaintext Т.е. если я правильно понял, то у тебя всё будет очень просто - Timer.Timer сработает только когда нужно выполнить действие, и не сработает, если его reset-нули/перезапустили до истечения интервала из OnComm... Т.е. просто ресет таймера помести как можно раньше в OnComm и всё... WBR, Igor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2004, 16:16 |
|
||
|
Поведение объектов
|
|||
|---|---|---|---|
|
#18+
Тут не так все просто. Состояние - это битовая маска совокупности состояний системы. При одних собития mscomm я должен тормозить таймер, при других нет. А как с выполнением метода самого таймера ? Его тож в очередь фокс поставит если событие MSCOMM OnCOmm() выполняется на участке истечения времени ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2004, 11:12 |
|
||
|
Поведение объектов
|
|||
|---|---|---|---|
|
#18+
Гость_xxxА как с выполнением метода самого таймера ? Его тож в очередь фокс поставит если событие MSCOMM OnCOmm() выполняется на участке истечения времени Да поставит в очередь. Причём может поставить не 1 событие а много - если фокс будет занят исполнением OnComm скажем 10 секунд а интервал таймера - 1 секунда, то по завершении OnComm подряд начнёт срабатывать Timer.Timer - без всяких интервалов , пока не отработают все 10 накопленных событий из очереди. Чтобы это избежать часто таймер приостанавливают на момент отработки события Timer (это в случае возможного длительного срабатываания самого обработчика Timer), и даже ресетят... То что у тебя битовая маска - ситуацию никак не меняет - просто чуть сложнее будет выглядеть условие... WBR, Igor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2004, 14:58 |
|
||
|
Поведение объектов
|
|||
|---|---|---|---|
|
#18+
А если из FLL установить калбак функцию функцией API SetTimer , как будет обстоять дело с асинхронностью в этом случае ? дернятся она внезависмотси от того занят фокс чем-то другим или нет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2004, 14:56 |
|
||
|
Поведение объектов
|
|||
|---|---|---|---|
|
#18+
Ну начнём с того, что ежели явно не создавать новый поток, то всё-равно пока фокс не освободится, ничего не будет AFAIK. А вот что касается попытки из созданного в fll отдельного потока снова вызвать через FoxAPI твой фоксовый код - то будет глюкъ, вплоть до С005. Вот если ты нарисуешь полностью обработку в этом отдельном потоке, а в основной только результат передавать будешь (а этот результат поступит в фоксовый код опять же когда никакой другой код исполняться не будет) - тогда возможно и получится... Кстати через специальный хитрый COM можно запускать в фоксе-же сделанную COM-компоненту - см. подробности на http://www.geocities.com/rremus/multithreaded_vfp.htm WBR, Igor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2004, 15:36 |
|
||
|
Поведение объектов
|
|||
|---|---|---|---|
|
#18+
А если защитить выполнение кода фокса и библы критическими секциями ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2004, 15:45 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32371743&tid=1597316]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
49ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 344ms |

| 0 / 0 |
