Форум » [x]Harbour » Как запретить перезагрузку Windows из Harbour ? » Ответить

Как запретить перезагрузку Windows из Harbour ?

Sergy: Добрый день. Многие сталкивались, наверное, с ситуацией, когда при перезагрузке Windows (например, после установки очередных обновлений) возникает сообщение: "Windows не может завершить работу приложения ABCDEF, нажмите "Завершить" или "Отменить". Как добиться похожего поведения программы на Harbour? Понятно, что этот механизм спрятан где-то внутри системы. Думаю, было-бы достаточно, чтобы при получении сообщения от операционки "быстро выходить" выполнялась определенная функция: закрывались таблицы, сохранялись документы и тп... Как считаете, это реально ? PS: откуда все это взялось: в процессе поиска редких и "необъяснимых" вылетов без единого сообщения в моем приложении прошло какое-то "кривое" октябрьское обновление для WinXP, которое требует многократной перезагрузки компа. Я сижу и смотрю логи, пытаюсь понять, что привело к вылетам и пустым логам... Спрашиваю у сотрудников че да как... А у них просто "компьютер потребовал перезагрузку, а выйти из программы забыли... а что, так разве нельзя???..."

Ответов - 24, стр: 1 2 All

Sergy: Pasha пишет: Да будь язык хоть самого сверхвысокого уровня, он не будет блокировать зацикливание при рекурсии, ни на этапе компиляции, ни на этапе интерпретации (когда такой этап имеется). Если знаете такой - напишите. На какой размер блокировать рекурсию ? На 100 ? На 100 тысяч ? А если это необходимо для расчетов ? Это же абсурд. Я привел пример Clipper, там все ровно: 130 рекурсивных вызовов и привет. 100 тысяч рекурсивных вызовов - вот это действительно абсурд. Надо понимать еже такой момент. Любая проверка в vm сказывается на его производительности. Если добавить эту абсурдную проверку, то выполнение всех харбор-функций будет чуть медленнее. Таких абсурдных проверок можно придумать множество. Но проверять такие вещи - не функция vm, а функция программиста. Насколько я понимаю Си и ассемблер, проверить одну переменную (указатель стека вызовов) - 2..3 машинных такта. Посмотрите, сколько "лишних" операций происходит при работе кода, написанного на Harbour. И все из-за целей совместимости. Опять-же, есть опция компилятора: сохранять номера строк выполняемых операций/команд/функций. Те-же самые 2-3 машинных такта. Выключите ее и посмотрите, насколько быстрее станет работать приложение. Честно говоря, вовсе не собирался с кем-то ругаться по этому поводу. И не хочу перекладывать вину с себя (где-то что-то ненароком зациклил) на среду разработки. Просто высказал свое удивление и надеюсь на взаимопонимание, а не метание какашками. Сорри если что не так. Давайте вернемся к теме: пока не могу сделать свой обработчик системных сообщений, подскажите плиз - кто-нить знает, где в реестре хранится время начала текущего сеанса ? Спасибо.

petr707: 1)Проще сделать свой собственный журнал - общую DBF при старте ПО сгенерить уникальный ИД сеанса и записать атрибуты начала сеанса (ИД,дата,время...). При завершении - найти в журнале свою запись по ИД и записать в эту строку атрибуты окончания сеанса. Если потом при просмотре журнала атрибуты окончания сеанса окажутся пустыми ( не записано), значит этот сеанс не дошел до конца(свалился) 2) Если есть права к Планировщику заданий компов клиентов - сделайте задания планировщика на запуск приложения, планировщик ведет журнал запуска сеансов.

Dima: Sergy пишет: Опять-же, есть опция компилятора: сохранять номера строк выполняемых операций/команд/функций. Те-же самые 2-3 машинных такта. Выключите ее и посмотрите, насколько быстрее станет работать приложение. Не поверил бы на слово , но пересобрав приложение чисто внешне обнаружил что работает несколько быстрее. А какие еще есть опции влияющие на производительность работы приложения ?


Sergy: Dima пишет: Не поверил бы на слово , но пересобрав приложение чисто внешне обнаружил что работает несколько быстрее. А какие еще есть опции влияющие на производительность работы приложения ? Ну, с таким-же успехом можно включить/выключть дебуггер и сравнить. Опция -b идет со времен Clipper.



полная версия страницы