Автор | Сообщение |
|
| |
Пост N: 12
Зарегистрирован: 08.07.06
|
|
Отправлено: 31.07.06 13:11. Заголовок: И всё-таки часы отстают...
имеем: Clipper 5.2e (DBFNTX) PM + Blinker 6.0 + CTP + FT_OnTick + DosIdle на время критичных операций вызываю DosIDle(FALSE) но все равно, через некоторое время отстают часы от системных... хелп плиз...
|
|
|
Ответов - 37
, стр:
1
2
All
[только новые]
|
|
|
| |
Пост N: 313
Зарегистрирован: 17.05.05
|
|
Отправлено: 31.07.06 13:45. Заголовок: Re:
Dosidle выкинь ;) Юзай это http://www.the-oasis.net/files/general/multi102.zip Говорю про allkey() На время критичных операций можно юзать что то типа ft_onidle({|| ft_iamidle()}) для NT и тд ft_onidle({|| ft_iamidle(15,.t.)}) // 15 подбирал руками , вроде оптимально получилось.
|
|
|
|
| |
Пост N: 13
Зарегистрирован: 08.07.06
|
|
Отправлено: 31.07.06 14:53. Заголовок: вопрос
посмотрел, вроде неплохо задумано, не понял одной вещи: этот самый ALLKEY мне просто нужно включить в мою программу в виде исходника, а MENU TO, INKEY(), GET будут сами к ней обращаться, т.е. она перекрывает имя стандартного вызова библиотеки Clipper ?
|
|
|
|
| |
Пост N: 314
Зарегистрирован: 17.05.05
|
|
Отправлено: 31.07.06 15:06. Заголовок: Re:
Из того исходника я использую только Allkey() Просто включи его в сборку и все свои вызовы (почти) Inkey() замени на Allkey()
|
|
|
|
| |
Пост N: 14
Зарегистрирован: 08.07.06
|
|
Отправлено: 31.07.06 15:50. Заголовок: получилось
подключил, заменил #command [<k>:=] INKEY(<x>) => [<k>:=] ALLKEY(<x>) и сделал FT_ONIDLE({||FT_IAMIDLE()}) все вроде заработало, на часы пока не смотрел, но остался важный момент: DBEDIT... и ещё возникают вопросы: 1) FT_IAMIDLE на сколько должен снижать загрузку ? Мне кажется, чегой-то не очень... 2) где посмотреть про его параметры ? Спасибо!
|
|
|
|
| |
Пост N: 315
Зарегистрирован: 17.05.05
|
|
Отправлено: 31.07.06 16:17. Заголовок: Re:
Dima пишет: цитата: | для NT и тд ft_onidle({|| ft_iamidle(15,.t.)}) |
| У тебя какая операционка ?
|
|
|
|
| |
Пост N: 316
Зарегистрирован: 17.05.05
|
|
Отправлено: 31.07.06 16:23. Заголовок: Re:
Sergy пишет: цитата: | 1) FT_IAMIDLE на сколько должен снижать загрузку ? Мне кажется, чегой-то не очень... 2) где посмотреть про его параметры ? |
| Посмотри NG к nanfor http://www.blinkinc.com/dl/misc/nfkit.zip
|
|
|
|
| |
Пост N: 15
Зарегистрирован: 08.07.06
|
|
Отправлено: 31.07.06 17:02. Заголовок: вот
нашел описание здесь http://www.engwall.com/clipper/nfpat1a.htm и почти во всем разобрался... ALLKEY получается практически не нужен ? в нашей сети много машин - от 200 до 3000 МГЦ, операционки Win98SE и WinXP - буду подбирать параметры FT_IamIdle() от чего отталкиваться ? Спасибо.
|
|
|
|
| |
Пост N: 317
Зарегистрирован: 17.05.05
|
|
Отправлено: 31.07.06 17:34. Заголовок: Re:
Sergy пишет: цитата: | в нашей сети много машин - от 200 до 3000 МГЦ, операционки Win98SE и WinXP - буду подбирать параметры FT_IamIdle() |
| я сделал так if ol_ismswin() ft_onidle({|| ft_iamidle()}) else ft_onidle({|| ft_iamidle(15,.t.)}) endif
|
|
|
|
| |
Пост N: 16
Зарегистрирован: 08.07.06
|
|
Отправлено: 31.07.06 17:44. Заголовок: у меня так:
у меня так: FT_OnIdle({||FT_IamIdle(15,IsWin2K())}) -------------------------------------------------- буду подбирать параметр 15 и проверять часы. Спасибо за помощь!
|
|
|
|
| |
Пост N: 318
Зарегистрирован: 17.05.05
|
|
Отправлено: 31.07.06 17:47. Заголовок: Re:
Кстати я тоже подбирал и остановился именно на 15 Удачи !
|
|
|
|
| |
Пост N: 22
Зарегистрирован: 08.07.06
|
|
Отправлено: 08.08.06 12:53. Заголовок: Re:
после недельного тестирования замечено следующее: 1) часы не отстают (даже чуточку спешат... мне кажется...) но видимо это из-за того, что рабочая станция синхронизируется с контроллером домена (?) 2) при любом значении параметра nIntensity (от 0 до 30) наблюдается задержка с обновлением окна задачи до нажатия на любую клавишу, например: сохраняем текущий экран, рисуем окошко, подготваливаем все GET поля, даем команду READ... в 10% случаев окно не появится до нажатия на любую клавишу (я обычно для "ускорения обновления" нажимаю Ctrl) причем в полноэкранном режиме такое налюдается при значениях nIntensity свыше 5. --------------------------------------------------- вот... пока придумал пару ходов: 1) в очередной раз перелопатить все исходники и вызывать FT_IamIdle() только на время ожидания ввода с клавиатуры...MENU TO, INKEY(x), ACHOICE(), DBEDIT() и тп что тянет за собой кучу проблем: когда DBEDIT или ACHOICE вызывает call-back функцию и эта функция начинает интенсивную работу... значит на входе в эту функцию снова нужно вызывать OnIdle() без параметров... а таких функций - десятки... замкнутый круг (?) 2) увеличить скорость обновления экрана консоли. Под Win98 этот параметр устанавливался в system.ini в секции [386enh] : windowupdatetime=10 (по умолчанию=50). В WinXP этот фокус не работает... Заранее спасибо!
|
|
|
|
|
| |
Пост N: 11
Зарегистрирован: 25.07.06
|
|
Отправлено: 09.08.06 19:43. Заголовок: Re:
Dima пишет: А как насчет TSlice?
|
|
|
|
| |
Пост N: 332
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.08.06 20:10. Заголовок: Re:
alexmar пишет: знакомое название , где взять ? ЗЫ не SUV случайно делал ?
|
|
|
|
| |
Пост N: 12
Зарегистрирован: 25.07.06
|
|
Отправлено: 09.08.06 20:51. Заголовок: Re:
|
|
|
|
| |
Пост N: 23
Зарегистрирован: 08.07.06
|
|
Отправлено: 10.08.06 14:02. Заголовок: Re:
цитата: | Dima пишет: цитата: Dosidle выкинь ;) А как насчет TSlice? |
| так с Tslice всё и началось - часы отставали... + не было средств контроля за включением/выключением модуля... DosIdle позволяет иногда "выключать" себя, если это необходимо параметром DosIdle(FALSE)
|
|
|
|
| постоянный участник
|
Пост N: 46
Зарегистрирован: 24.09.05
|
|
Отправлено: 16.08.06 17:50. Заголовок: Re:
см след. сообщение
|
|
|
|
| постоянный участник
|
Пост N: 47
Зарегистрирован: 24.09.05
|
|
Отправлено: 16.08.06 17:53. Заголовок: Re:
В моей tslice выгрузка сто лет уж как есть, просто сюда не заливалась - нах никому не нужна. Про отставание часов тож писал - там все хитро, но победить можно. А уж про то, что надо делать, чтобы не жать CTRL для ускорения программы - это я уже столько раз писал на форуме, что и повторять нет смысла
|
|
|
|
| |
Пост N: 25
Зарегистрирован: 08.07.06
|
|
Отправлено: 17.08.06 11:15. Заголовок: Re:
будь человеком - скинь сразу ссылки - у меня интернет медленный, а поиск по форуму криво работает...
|
|
|
|
| |
Пост N: 334
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.08.06 11:27. Заголовок: Re:
suv2 пишет: цитата: | это я уже столько раз писал на форуме, что и повторять нет смысла |
| Напиши еще раз пожалуйста
|
|
|
|
| постоянный участник
|
Пост N: 53
Зарегистрирован: 24.09.05
|
|
Отправлено: 17.08.06 15:57. Заголовок: Re:
Да там писанины на 4 тома "Войны и мира". Конспективно - функция разгрузки замедляет выполнение программы. Разгрузка должна вызываться только в те моменты времени, когда программа ДЕЙСТВИТЕЛЬНО ожидает нажатия клавиши (т.е. ей нечего делать). Когда идет обработка баз - функция разгрузки НЕ ДОЛЖНА вызываться. Всякие левые (читай - сделанные не мной) библиотеки разгрузки устроены таким образом - они вешаются на функцию считывания клавиатуры и попутно делают разгрузку. Однако, клиппер устроен так, что он считывает клавиатуру ПОСТОЯННО, даже в те моменты, когда идет работа. Следовательно, разгрузка вызывается в те моменты, в которые вызываться не должна. В результате программа работает в десятки раз медленнее и для ее ускорения приходится жать Ctrl. Моя версия разгрузки встроена непосредственно в переделанное мной ядро клиппер, и она вызывается только в те моменты, когда действительно программист В СВОЕМ КОДЕ (PRG) вызывает функцию считывания клавиатуры INKEY. Но даже такая грамотная библиотека разгрузки может приводить к нежелательным последствиям. Например, программисты часто проверяют не нажат ли ESC, чтобы выйти из длительно работающего цикла. Следовательно, чем быстрее процессор и следовательно чем чаще вызывается INKEY() в цикле и следовательно чем чаще вызывается разгрузка - тем сильнее тормозит программа, которая пытается делать полезные действия в цикле. Для преодоления этих трудностей надо применять специальные приемы программирования. 1) Например, отключать разгрузку на время работы цикла. 2) Или считывать клавиатуру не чаще, чем 1-2 раза в секунду. 3) Или не считывать клавиатуру вообще Второй способ предполагает использование seconds(), который сильно тормозит систему. Использование вместо seconds() своей функции, считывающей время не через сервис DOS, а из области данных BIOS приводит к очевидному замедлению системных часов, т.к. виндовый эмулятор DOS выполняет обновление часов при определенных обращениях DOS-программы к сервису DOS/BIOS. Такое же замедление системных часов может быть (не всегда) и при способе 3) Следовательно, наилучшим решением будет 2) с чтением времени своей функцией, написанной специальным образом зы. На клиппер в наше время писать СОВСЕМ не просто.
|
|
|
|
| постоянный участник
|
Пост N: 54
Зарегистрирован: 24.09.05
|
|
Отправлено: 17.08.06 16:13. Заголовок: Re:
Есть еще 4-е решение. Вместо inkey() использовать MyInkey(), в которой (И ТОЛЬКО В НЕЙ) вручную делать разгрузочные вызовы (т.е. вызывать функцию, которая делает один разгрузочный вызов. Или включать разгрузку, а по выходу из MyInkey - выключать разгрузку, если соответствующая библиотека позволяет это делать). Для проверки выходов из цикла - использовать inkey(), при этом разгрузочных вызовов делаться не должно. При этом все стандартные интерфейсные функции (если они используются) должны быть ПЕРЕПИСАНЫ заново (переделка inkey на MyInkey). Это get-система, wait, menu to, browse, dbedit. Часть функций - есть в исходниках на PRG в комплекте поставки, а такие вещи как achoice - надо переписывать самому. Т.е. простых путей нет и для того, чтобы клиппер-программа работала быстро и при этом не тормозила систему в целом, когда не программа не работает - надо потрудиться. Кто ленится - у того тормозит либо система, либо ему надо жать CTRL, чтобы программа работала быстро))) либо часы системные серьезно отстают )
|
|
|
|
|
| |
Пост N: 335
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.08.06 16:57. Заголовок: Re:
suv2
|
|
|
|
| |
Пост N: 26
Зарегистрирован: 08.07.06
|
|
Отправлено: 17.08.06 17:28. Заголовок: Спасибо, мусчино!
у меня были похожие мысли: цитата: | вот... пока придумал пару ходов: 1) в очередной раз перелопатить все исходники и вызывать FT_IamIdle() только на время ожидания ввода с клавиатуры...MENU TO, INKEY(x), ACHOICE(), DBEDIT() и тп что тянет за собой кучу проблем: когда DBEDIT или ACHOICE вызывает call-back функцию и эта функция начинает интенсивную работу... значит на входе в эту функцию снова нужно вызывать OnIdle() без параметров... а таких функций - десятки... замкнутый круг (?) |
| буду думать в этом направлении. Спасибо!
|
|
|
|
| постоянный участник
|
Пост N: 55
Зарегистрирован: 24.09.05
|
|
Отправлено: 21.08.06 14:00. Заголовок: Re:
suv2 пишет: цитата: | Есть еще 4-е решение. Вместо inkey() использовать MyInkey(), в которой (И ТОЛЬКО В НЕЙ) вручную делать разгрузочные вызовы |
| при этом надо помнить, что если в цикле тогда для проверки на выход надо использовать простую inkey(), чтобы работа цикла не тормозилась
|
|
|
|
| |
Пост N: 27
Зарегистрирован: 25.07.06
|
|
Отправлено: 07.09.06 10:33. Заголовок: вопросы к suv2 по поводу tslice
suv2 пишет: цитата: | В моей tslice выгрузка сто лет уж как есть, просто сюда не заливалась - нах никому не нужна. |
| а каким образом она выключается? suv2 пишет: цитата: | Моя версия разгрузки встроена непосредственно в переделанное мной ядро клиппер, и она вызывается только в те моменты, когда действительно программист В СВОЕМ КОДЕ (PRG) вызывает функцию считывания клавиатуры INKEY. |
|
Так получается, что TSInstall() можно использовать с переделанным ядром клиппера?
|
|
|
|
| |
Пост N: 28
Зарегистрирован: 25.07.06
|
|
Отправлено: 07.09.06 18:34. Заголовок: для Sergy
Sergy пишет: цитата: | скинь сразу ссылки - у меня интернет медленный, а поиск по форуму криво работает... |
|
Кажется здесь это обусуждалось
|
|
|
|
| постоянный участник
|
Пост N: 67
Зарегистрирован: 24.09.05
|
|
Отправлено: 08.09.06 14:08. Заголовок: Re:
alexmar пишет: цитата: | а каким образом она выключается? |
| tssupport (.T.|.F.) - вроде так alexmar пишет: цитата: | Так получается, что TSInstall() можно использовать с переделанным ядром клиппера? |
| Раньше было - с любым. Библа была навесная и работала по типу вируса. Она искала в памяти определенный код, стирала часть кода, писала код передачи управления на себя, потом делала свои черные дела, выполняла сама затертую ранее часть кода и отдавала дальше управдение клипперу. Потом я посмотрел, как делает разгрузку Стекленев - оказалось, что есть некий апи и можно вызывать свою функцию разгрузки более дешевым способом. Но когда я попробовал так и сяк, мне не понравился ни мой способ, ни способ Стекленева. Если не изменяет память - что мой код, что его - вызывается постоянно. Например даже тогда, когда пользователь непрерывно стучит по клавиатуре. В этом случае вызывать разгрузку абсурдно - я например могу вводить строку, а программа выбирает из базы подходящие строки, зачем замедлять этот процесс? Кроме этого, если мне не изменяет память, была и более серьезная причина. Клиппер опрашивает клавиатуру в фотовом режиме и функция разгрузки (в моей библиотеке и в его) вызывается все равно даже тогда, когда я не вызываю inkey, а работаю с базами. И пришлось пойти в ядро, расковырять его и сделать вызов разгрузки только тогда, когда клиппер пытается ДЕЙСТВИТЕЛЬНО (с помощью ЯВНОГО ВЫЗОВА INKEY) считать клавиатуру + а пользователь ничего в данный момент не жмет (т.е. инкей ожидает ввода) Эту задачу на момент ее рещения мне было проще сделать не навесным способом, а встроить непосрелдственно в ядро, поскольку я на тот момент обладал большинством декомпилированных исходников ядра клиппер-машины. И чем писать внедряющийся код, я просто вставил разгрузку в ядро. Поэтому эта библиотека доступна только вместе с ядром) Могу залить в принципе. Из того, что мне там нравится - макрооператор проглатывает строки до 2048 символов ) ну и так всякие исправления, фиксы багов всякие, с отладчиком всякие приколы)
|
|
|
|
| |
Пост N: 29
Зарегистрирован: 25.07.06
|
|
Отправлено: 08.09.06 18:01. Заголовок: Re:
suv2 пишет: цитата: | Поэтому эта библиотека доступна только вместе с ядром) Могу залить в принципе |
|
Пока, пожулуй, не нужно. Сейчас пробую встраивать разгрузку, как Sergy, через FT_OnIdle({||FT_IamIdle())}) в модернизированную MyInKey() с учетом того, о чем говорилось здесь выше. Если все будет нормально, то остановлюсь на этом варианте. ЗЫ Обнаружил, правда, что FT_IamIdle() конфликтует с отладчиком. Вываливается по GPF после того, как в отладчике 10- 15 раз нажмешь клавиши управления. Приходится отключать разгрузку при работе од отладчиком. Sergy, ты работал с FT_IamIdle(). У тебя такого не было?
|
|
|
|
| |
Пост N: 36
Зарегистрирован: 08.07.06
|
|
Отправлено: 09.09.06 13:33. Заголовок: Re:
с отладчиком не работал ВАЩЕ, поэтому тут ничем не смогу помочь... -------------------------------------- сейчас остановился на FT_IamIdle() - пока полет нормальный.
|
|
|
|
| постоянный участник
|
Пост N: 71
Зарегистрирован: 24.09.05
|
|
Отправлено: 14.09.06 10:48. Заголовок: Re:
alexmar пишет: цитата: | ЗЫ Обнаружил, правда, что FT_IamIdle() конфликтует с отладчиком |
| Отладчик конфликтует сам с собой. Для того, чтобы нахрен слететь, ему не нужно никаких фт_онидле. )) Вполне себе самодостаточная вещь ))) Но вообще не удивлен)) Есть только ОДНА правильная разгрузка - разгрузка в моём ядре. Все остальное - кривота. Пользуйтесь правильным софтом) Кстати, кто пользуется АДС - тому и этой разгрузки недостаточно, он должен пользоваться особыми навесными функциями разгрузки для АДС ) Требуйте пропатченую мной версию в аптеках города
|
|
|
|
| постоянный участник
|
Пост N: 73
Зарегистрирован: 24.09.05
|
|
Отправлено: 14.09.06 11:01. Заголовок: Re:
Sergy пишет: цитата: | с отладчиком не работал ВАЩЕ |
| Напрасно, батенька. Уж на что я сам пишу без ошибок ))) Но и то пользуюсь, чтобы в этом убедиться Sergy пишет: цитата: | сейчас остановился на FT_IamIdle() - пока полет нормальный |
| Там трудностей много, как я писал. Неужто уже все победил?
|
|
|
|
|
| |
Пост N: 42
Зарегистрирован: 08.07.06
|
|
Отправлено: 14.09.06 12:24. Заголовок: Re:
цитата: | цитата: сейчас остановился на FT_IamIdle() - пока полет нормальный Там трудностей много, как я писал. Неужто уже все победил? |
| да я ведь и ответил... замирания происходят иногда... помогает "нажатие Ctrl" Пока решил поступить таким образом: Написал функцию SetSysPower(nPercentage), которую вызываю перед началом критичного цикла так: x := SetSysPower(100) // мне нужно 100 процентов мощности, + возвращаем установленное значение для сохранения // здесь в цикле делаю что-то... SetSysPower(x) // восстанавливаю первоначальное значение. ----------------------------- в функции SetSysPower() - если требуемое значение мощности более 50 (процентов) - выключаю все FT_IamIdle() - программа работает реально быстро, безо всяких Ctrl Если требуемое значение ниже 50 - восстанавливаю разгрузку системы. ---------------------------- При запуске программы делаю SetSysPower(10) - по умолчанию разгрузка включается. Исходников много, поэтому добавляю по мере реальной необходимости. Потом, если ВДРУГ решу перейти на твой вариант, когда разгрузка по умолчанию ВЫКЛЮЧЕНА, добавленные фрагменты кода просто не будут мешать: т.е. возвращаемое значение для x и так будет равно 100. ---------------------------- Слушай, вот ты всё время говоришь про какое-то переделанное ядро Клиппер: у меня 5.2e + DBFNTX - мне оно можеот пригодиться? Если да - будь человеком, скинь куда-нибудь - давай посмотрим, чего из этого можно реально в жизни применить... Просто так получается, что клипперистов в России осталось человек 20 (судя по нашему форуму) - какой смысл делать из этого суперсекретный проект?
|
|
|
|
| постоянный участник
|
Пост N: 77
Зарегистрирован: 24.09.05
|
|
Отправлено: 14.09.06 14:01. Заголовок: Re:
так я и не говорю, что это секретно. надо просто сделать и выложить. внимательно посмотреть, все ли там в ядре самодостаточно и не находится ли какая-нибудь хрень уже не в ядре, а в моей библиотеке
|
|
|
|
| |
Пост N: 44
Зарегистрирован: 25.07.06
|
|
Отправлено: 14.09.06 18:29. Заголовок: Re:
suv2 пишет: цитата: | Там трудностей много, как я писал. Неужто уже все победил? |
|
У меня переделка заняла где-то пол-дня. По умолчанию разгрузка выключена. Включаю только при вызове Inkey с параметром 0 или больше 0. Вместо штатных MENU TO, DBEDIT() и ACHOICE() использую свои, которые переделал с поддержкой разгрузки. Вроде все работает и тормозов особых нигде не наблюдаю.
|
|
|
|
| |
Пост N: 45
Зарегистрирован: 25.07.06
|
|
Отправлено: 14.09.06 18:34. Заголовок: Re:
Sergy пишет: цитата: | ... так получается, что клипперистов в России осталось человек 20 (судя по нашему форуму) |
| off Увы, печальный факт. И как хорошо, что этот форум еще жив. Наверно это последний заповедник клипперистов бывшего союза...
|
|
|
|
| |
Пост N: 37
Зарегистрирован: 06.06.06
|
|
Отправлено: 14.09.06 19:10. Заголовок: Re:
alexmar пишет: цитата: | Наверно это последний заповедник клипперистов бывшего союза... |
| Может, сделаем перепись оставшегося населения?
|
|
|
|
| постоянный участник
|
Пост N: 87
Зарегистрирован: 24.09.05
|
|
Отправлено: 15.09.06 12:56. Заголовок: Re:
alexmar пишет: цитата: | У меня переделка заняла где-то пол-дня. По умолчанию разгрузка выключена. Включаю только при вызове Inkey с параметром 0 или больше 0. Вместо штатных MENU TO, DBEDIT() и ACHOICE() использую свои, которые переделал с поддержкой разгрузки. Вроде все работает и тормозов особых нигде не наблюдаю |
| а вот и неправильно) включай разгрузку только в том случае, если инкей за целую секунду не получил никакой кнопки и продолжает ждать))) В этом случае ты можешь более дешево проверять ESC при работе цикла))) Один раз считали, ESC не обнаружен, продолжили шуровать базы, разгрузку не вызывали, скорость работы не теряем))) думать надо, думать)))
|
|
|
Ответов - 37
, стр:
1
2
All
[только новые]
|
|