:: Visual Foxpro, Foxpro for DOS
виснет приложение
PuMa

Сообщений: 153
Откуда: Комсомольск-на-А
Дата регистрации: 19.04.2006
Добрый день

Ситуация следующая. Из программы, написанной на клиппере запускается VFP EXE, который формирует и отправляет на принтер некий документ и завершает выполнение. Но иногда фоксовая программа виснет и не завершается.
Сама фоксовая программа состоит из одного PRG, в которой две последние строки:
strtofile( ttoc( datetime() ) + ': Завершаем программу' + chr(13)+chr(10), m.lcLogPath + '\log.txt', 1 )
return
Так вот программа отрабатывает нормально (документ на печать уходит и строка в лог-файл пишется), но не завершается и на экране остается висеть основной экран фокса.

В чем тут может быть причина?
Ratings: 0 negative/0 positive
Re: виснет приложение
pasha_usue

Сообщений: 3650
Откуда: Е-бург
Дата регистрации: 06.10.2006
Потому что QUIT
Ratings: 0 negative/0 positive
Re: виснет приложение
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Может и в принтере (его драйверах) быть причина - особенно если принтер сетевой.
Фокс вполне себе способен повиснуть "после отрабатывания последней строки кода" на весьма длительное, и даже в теории на "бесконечное" время - из за всех этих левых dll (принтерные драйвера, ODBC драйвера не говоря уж про активиксы и явные declare-dll) подгружаемых для работы основного кода.


------------------
WBR, Igor
Ratings: 0 negative/2 positive
Re: виснет приложение
PuMa

Сообщений: 153
Откуда: Комсомольск-на-А
Дата регистрации: 19.04.2006
quit пробовал, не помогает.
Скорее всего, как и сказал Игорь, проблема в принтере (он как раз сетевой), т.к. прога простая и никаких сторонних активиксов и dll не используется.
А как проще это дело отследить и автоматически "прибить" это приложение, если оно подвисло?
Есть мысль запустить эту прогу через process.prg от Piva. И в ней грохать по времени выполнения...
Но вдруг можно как проще?
Буду признателен за интересные идеи
Ratings: 0 negative/0 positive
Re: виснет приложение
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
PuMa
Буду признателен за интересные идеи

Смотря как организована отправка на печать по сети. Надеюсь это не прямой вывод из рипорта?
Если нет, то можно было бы посылать на принтер не из самого фокса, а использовать например скриптовую машину Windows.
Загружая скажем отправку через метод Run, т.к. он создаёт новый независимый процесс, который запускает заданное приложение, в обычном или скрытом виде.
Либо же, особенно, если вывод из фокса прямой - в принципе можно например сначала посылать на виртуальный pdf-принтер, с которого уже и слать на сетевой. Сам фокс при этом висеть уже точно не должен.
Тут кстати недавно была тема, я как раз упоминал попавшийся как-то, также не так давно Doro PDF Writer, который, в отличие от большинства прочих, позволяет легко через настройку параметров в ini-файле, посылать файл на печать, в том числе и в скрытом виде, без каких-то действий пользователя, при этом еще и бесплатен.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: виснет приложение
PaulWist
Автор

Сообщений: 14625
Дата регистрации: 01.04.2004
************** Очистка мат сопроцессора от отчетов
DECLARE _fpreset IN msvcrt20.dll && (иначе VFP виснет намертво)
**************
REPORT FORM ..... TO PRINTER PROMPT NOCONSOLE
=_fpreset()


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/1 positive
Re: виснет приложение
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Да, несмотря на несколько "колхозный" комментарий это может помочь - некоторые драйвера именно такую ошибку имели... Иначе - ну остаётся играться с разными версиями драйверов (поставить для другого но совместимого принтера, поставить штатный вариант от МС вместо версии от производителя принтера или наоборот) и разными их настройками - без гарантий успеха, увы.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: виснет приложение
PaulWist
Автор

Сообщений: 14625
Дата регистрации: 01.04.2004
Igor Korolyov
Да, несмотря на несколько "колхозный" комментарий это может помочь ...

В чём "колхозность" у меня именно так (фокс вис "намертво") проявлялось на VFP5, что так же описано на сайте ПРОИЗВОДИТЕЛЯ, и про мат. сопроцессор - это на сайте ПРОИЗВОДИТЕЛЯ там же написано:

Цитата:
Visual FoxPro sets the numeric coprocessor to handle exceptions in hardware. The printer driver routines change this numeric coprocessor setting so that coprocessor exception handling takes place in software, but fails to restore the original setting when the printer driver routines have completed. When a subsequent numeric coprocessor exception occurs in Visual FoxPro (division by zero, for instance), the numeric coprocessor expects the exception to be handled in software. Visual FoxPro is not able to do this, and an exception error, crash or hang occurs.

support.microsoft.com


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/1 positive
Re: виснет приложение
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
PaulWist
Igor Korolyov
Да, несмотря на несколько "колхозный" комментарий это может помочь ...
В чём "колхозность"
В комментарии, Карл!
Никакой сопроцессор не "очищается" и тем более "от отчётов"

Эта функция переинициалилирует структуры памяти нужные для работы других библиотечных (сишных) математических функций.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: виснет приложение
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Цитата:
это на сайте ПРОИЗВОДИТЕЛЯ там же написано:
Игорь, тогда "колхозность" не к Павлу, а к ПРОИЗВОДИТЕЛЮ !!
"ПРОИЗВОДИТЕЛь" подозревается тобой в "колхозности".
В принципе, можно ссылаться и на "колхозника", если тот прав.
Результат важнее качества формы, в которой он подан.

Igor Korolyov
Эта функция переинициализирует структуры памяти нужные для работы других библиотечных (сишных) математических функций.
Т.е., хорошо. И скажи прямо - ХОРОШО!
Лично я о сопроцессоре вааще ничего не знаю (чужой для меня человек). Но может "колхозник" знает больше, чем я, но меньше, чем ты!

Как твой опиньон (мнение)?
Пашка знает Маркса лучше всех на Форуме. Но он нам не говорит, что мы в этом колхозники.
Да и колхозники были всякие...

Пашка не заслужил своим постом обиды, он в топике сейчас лидер.
У него больше поднятых пальцев. А Игорь сразу вектор определил!



Исправлено 2 раз(а). Последнее : Ydin, 24.03.16 19:09
Ratings: 0 negative/0 positive
Re: виснет приложение
PuMa

Сообщений: 153
Откуда: Комсомольск-на-А
Дата регистрации: 19.04.2006
Всем спасибо за советы. Буду пробовать.
Ratings: 0 negative/0 positive
Re: виснет приложение
PaulWist
Автор

Сообщений: 14625
Дата регистрации: 01.04.2004
Igor Korolyov
PaulWist
Igor Korolyov
Да, несмотря на несколько "колхозный" комментарий это может помочь ...
В чём "колхозность"
В комментарии, Карл!
Никакой сопроцессор не "очищается" и тем более "от отчётов"

Эта функция переинициалилирует структуры памяти нужные для работы других библиотечных (сишных) математических функций.

1. "Колхозное" описание про отчеты - это я для себя писал, что бы помнить "нафига" эта declare dll нужна, тут про "колхоз" я согласен.

2. Тут Aijik (помнишь такого )

По "рабоче-крестьянски" обьясняет, чЁ ф-ия делает:

Цитата:
The _fpreset function reinitializes the floating-point math package (с) MSDN
Я объясню "на пальцах", как сам это понял, ни фига не шаря в ассемблере, Cи и низкоуровневом программировании... Если что не так, наши C++ монстры меня поправят
Драйвера принтера в своей работе использует операции с плавающей точкой. Как следствие, юзают этот самый floating-point math package. Этот math package можно низкоуровнево настраивать, что зовется "статусом FPU". Иногда низкоуровневые операции с FPU вызывают ошибку (исключение), из-за того, что инструкции посылаемые сопроцессору рассчитаны на один статус, а сам сопроцессор в это время настроен на другой, поскольку статус "floating-point math package" был изменен какими-то расчетами ранее.
Что происходит, когда мы запускаем репорт... Фокс, когда вызывает драйвер принтера для этой задачи, делает настройку, чтобы ошибки сопроцессора FPU, ежели такие вознинут, обрабатывались самим драйвером принтера, и в Фокс исключения не отсылались (VFP защищает этим сам себя, поскольку движок VFP не умеет такие исключения обрабатывать). HP'шные драйвера принтеров (если верить Майкрософту) меняют на время своей работы работой эту настройку обратно и устанавливают, чтобы Фокс сам обрабатывал исключения FPU (задача, от которой сам фокс пытался "отмазаться" с самого начала). В результате, когда при подготовке отчета драйвером возникают ошибки, система посылает возникающий exception в VFP, а VFP от такого подарочка уходит в глубокий даун, по причине того, что не знает что с этим подарочком делать...
Что происходит, когда до вызова отчета мы вызываем _fpreset.... Вызывая функцию _fpreset, мы очищаем текущий статус FPU (т.е. убираем "мусор", сами возвращаем статус floating-point math package в первородное состояние). Поэтому операции драйвера с плавающей точкой ошибку не вызывают, исключение не генерируется и не отсылается драйвером обратно в VFP.
Я так понимаю, что вызов _fpreset в принципе безопасен, т.к. просто убирает чужой мусор...

Первоисточник forum.foxclub.ru


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: виснет приложение
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Ydin
Игорь, тогда "колхозность" не к Павлу, а к ПРОИЗВОДИТЕЛЮ!!
Ещё раз для нечитателей... на пальцах...
- совет ХОРОШИЙ.
- "колхозный" только КОММЕНТАРИЙ в коде, а не сам код - с чем и автор вполне согласен Ну да ему то понятно о чём речь идёт - так что это и вовсе не вопрос.
Ydin
"ПРОИЗВОДИТЕЛь" подозревается тобой в "колхозности".
Производитель соответствующих принтерных драйверов подозревается мной не в "колхозности", а в том что это обезьяны с тыквой на плечах вместо головы.
VFP тим - ну в некоторой степени лентяи, раз уж не встроили прямо в фокс защиту от этих китайских г*нокодеров (проблема то очень старая). Впрочем, в этом их сложно упрекать - от идиотов, как известно, никакая защита не является достаточно надёжной А навешивать "лишнее", чтобы оно хоть и мало-мало но ухудшало/замедляло работу ПО с нормальными драйверами... Видимо это было признано нецелесообразным.
Ydin
Пашка не заслужил своим постом обиды, он в топике сейчас лидер.
А он разве обиделся Тем более что ничего обидного сказано и не было. Или у кого-то уж сравнение не с интеллигентом в белых перчатках а с человеком простого физического труда является оскорблением


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: виснет приложение
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Сейчас нормально все сказал!
Ratings: 0 negative/0 positive
Re: виснет приложение
BOBAN

Сообщений: 625
Откуда: Солигорск
Дата регистрации: 05.07.2004
Igor Korolyov
VFP тим - ну в некоторой степени лентяи, раз уж не встроили прямо в фокс защиту от этих китайских г*нокодеров

Ну да, недоглядели ....

Цитата:
For the VFP Advanced (x64),
I did a lot of work for support > 2gb files,
but now there are some other problems such as:
1, Win32 executable / COM server program, now there are some problems ...
2, drag-and-drop function
After I solve these problems,
I will solve the 2gb problem.

Best regards.
Chen
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 63 (Гостей: 63)

© 2000-2024 Fox Club 
Яндекс.Метрика