powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / How to run FoxPro EXE-server asynchronously. Eurika!
8 сообщений из 33, страница 2 из 2
How to run FoxPro EXE-server asynchronously. Eurika!
    #38179105
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rostislav D. KudryashovЧтобы избежать возобновления работы AsyncServer.WorkIt надо или вставлять в него специально для этого случая какое-то ON ERROR, или просто держать этот метод в отдельном классе, как у меня и сделано. Ведь ON ERROR в WorkIt для персечения его работы это, во-первыхи, извращение, а во-вторых - всё равно всё равно WorkIt останавливается не вовремя.


Кроме ON ERROR есть еще COMRETURNERROR() и TRY ... ENDTRY, но это вы уж сами.

Из Destroy обычно вызывается процедура закрытия программы, как и из обработчика ошибок, OnShutdown и др.
...
Рейтинг: 0 / 0
How to run FoxPro EXE-server asynchronously. Eurika!
    #38179109
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rostislav D. Kudryashovодна милли-секунда - это погрешность срабатывания таймера.
Сам то понял что написал? таймер это не аналоговый прибор с погрешностями.
Кстати одна миллисекунда это очень много времени. Слабенький процессор в 1,5 ГГц выполняет до 1,5 млн. операций за это время.
Rostislav D. KudryashovИспользовать такие значения - просто техническая неграмотность.
Быстро работающий код это неграмотность. Забавно.
Желаю удачи в написании тормозов. Будет глючить - увеличь интервал
...
Рейтинг: 0 / 0
How to run FoxPro EXE-server asynchronously. Eurika!
    #38179214
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, a prpos на твой PS
авторPS Удобнее останавливать Timer.Enabled = .F.
На моём компе, если запустить Timer с Interval < 38 и при первом срабатывании в методе Timer поставить THIS.Interval = 0, то и установка THIS.Enabled = .F. не спасает от серии последующих срабатываний таймера.
Похоже, это результат разности между скоростью реализации таймера средствами WinAPI и скоростью интерпретации операторов FoxPro. Пока FoxPro перешагнёт одну строку, WinAPI крутанёт таймер несколько десятков раз. Так что рекомендованный тобой "замок" по свойствам Timer на входе самое верное.
...
Рейтинг: 0 / 0
How to run FoxPro EXE-server asynchronously. Eurika!
    #38179217
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, a prpos на твой PS
Dima TPS Удобнее останавливать Timer.Enabled = .F.
На моём компе, если запустить Timer с Interval < 38 и при первом срабатывании в методе Timer поставить THIS.Interval = 0, то и установка THIS.Enabled = .F. не спасает от серии последующих срабатываний таймера.
Похоже, это результат разности между скоростью реализации таймера средствами WinAPI и скоростью интерпретации операторов FoxPro. Пока FoxPro перешагнёт одну строку, WinAPI крутанёт таймер несколько десятков раз. Так что рекомендованный тобой "замок" по свойствам Timer на входе самое верное.
...
Рейтинг: 0 / 0
How to run FoxPro EXE-server asynchronously. Eurika!
    #38179224
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12, ну вот ты пытаешься хоть к чему-то прицепить свои "опровержения", а ведь речь о том, что ты не раскаялся в своём предложении поднять метод WorkIt из Member-класса Worker в контейнер для этого класса - класс AsyncWorker.
Криминал в твоём предложении тот, что если AsyncWorker.Destroy сработает во время работы метода WorkIt, то этот метод всё равно получит управление сразу после выхода из AsyncWorker.Destroy. Но все члены класса AsyncWorker для метода WorkIt станут недоступны. Так что если WorkIt оказался в классе AsyncWorker, то неизбежен сбой при обращении из WorkIt к членам AsyncWorker.

Пока не осознаешь свою ошибку, больше сюда не пиши.
...
Рейтинг: 0 / 0
How to run FoxPro EXE-server asynchronously. Eurika!
    #38179227
Еще нужно обязательно делать маппинг таблиц на память, перед использованием. Create, так сказать, FileMappingDBF и т.д..
...
Рейтинг: 0 / 0
How to run FoxPro EXE-server asynchronously. Eurika!
    #38179317
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rostislav D. KudryashovDima T, a prpos на твой PS
авторPS Удобнее останавливать Timer.Enabled = .F.
На моём компе, если запустить Timer с Interval < 38 и при первом срабатывании в методе Timer поставить THIS.Interval = 0, то и установка THIS.Enabled = .F. не спасает от серии последующих срабатываний таймера.
Похоже, это результат разности между скоростью реализации таймера средствами WinAPI и скоростью интерпретации операторов FoxPro. Пока FoxPro перешагнёт одну строку, WinAPI крутанёт таймер несколько десятков раз. Так что рекомендованный тобой "замок" по свойствам Timer на входе самое верное.
Я и не говорил что Enabled = .F. спасет от повторов. От повторов спасет только проверка что таймер уже остановлен. Пример выше я давал.
Enabled = .F. только упрощает код. Например у тебя несколько мест где прописано .Interval = 1000, если ты 1000 захочешь сменить - надо будет выискивать все места. При использовании Enabled интервал будет указан только в одном месте.
Что касается твоих догадок, то Interval < 38 частный случай для конкретного кода на конкретном компе. Может быть больше, может меньше. Если бы была рекомендуемая константа - написали бы в хэлпе.

В твоем случае таймер только для организации асинхронности и никаких доп.пауз не требуется, значит ему надо Interval = 1 чтобы полезный код начал выполняться как можно быстрее.

Причина в следующем: Timer при включении дает команду виндовсу ( SetTimer() ) слать окну фокса сообщение WM_TIMER, которое с заданной периодичностью добавляется в очередь сообщений и обрабатывается по мере возможности, т.е. в момент остановки таких сообщений может быть несколько и они все будут обработаны фоксом.
...
Рейтинг: 0 / 0
How to run FoxPro EXE-server asynchronously. Eurika!
    #38181064
RX032
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не ... мозги. Проблема решается просто. Либо через DCOM сервер (позднее связывание) ,либо через поточную DLL/FLL.
...
Рейтинг: 0 / 0
8 сообщений из 33, страница 2 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / How to run FoxPro EXE-server asynchronously. Eurika!
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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