powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Принудительное завершение программы
60 сообщений из 60, показаны все 3 страниц
Принудительное завершение программы
    #33628806
Stind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем!
Вопрос такой. Ночью проводится переиндексация. Нужен монопольный доступ. Но один ... периодически не выходит из программы в конце работего дня и так и оставляет компьютер на ночь (опечатывая дверь). Уходит он поздно, так что стоять и ждать его невозможно. Есть ли способ с другого компа завершить его программу?
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #33628817
Фотография Feg16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у тебя есть права, то RAdmin тебе в помощь.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #33628819
5631
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объявить ему строгий выговор.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #33628833
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чья прога? Если твоя, включи на тулбаре таймер, и в указанное время CLOSE DATABASE ALL и прогу не закрывать,а после этого времени, запускай индексации, упаковки прочую лабудень... А хошь, можно потом и QUIT вставить...
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #33628948
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пусть сервер выбрасывает пользователей из сети в обусловленное время.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #33628999
Stind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо! Буду экспериментировать.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #33633907
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Urri!

Опасно - как раз может "накрыться" таблица при таком жестоком способе.
Программа должна быть закрыта по возможности штатно - для чего как раз и
подойдёт таймер и возможно файл-триггер (как только таймер увидел файл - он
корректно закрывает программу).
Также, если программа написана правильно, и имеет адекватный обработчик ON
SHUTDOWN, то можно просто удалённо выключать/перегружать этот нехороший
компьютер - при штатном завершении сеанса Windows все программы закрываются
(причём не аварийно, а "нормально"). А удалённо перегрузить любую машину не
составляет проблем - например утилитой shutdown ;)

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #33635186
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Korolyov
Hi Urri!

Опасно - как раз может "накрыться" таблица при таком жестоком способе.
Программа должна быть закрыта по возможности штатно - для чего как раз и
подойдёт таймер и возможно файл-триггер (как только таймер увидел файл - он
корректно закрывает программу).
Также, если программа написана правильно, и имеет адекватный обработчик ON
SHUTDOWN, то можно просто удалённо выключать/перегружать этот нехороший
компьютер - при штатном завершении сеанса Windows все программы закрываются
(причём не аварийно, а "нормально"). А удалённо перегрузить любую машину не
составляет проблем - например утилитой shutdown ;)

Posted via ActualForum NNTP Server 1.3Практика (на Novell) показывает, что не опасно. Главное, чтобы в это время пользователь был неактивен. Ну и еще программа должна быть написана так, чтобы данные начинали и заканчивали писаться в таблицы по одному действию пользователя, а не двум разным. Впрочем, я и сам за штатное закрытие. Т.е. полезно комбинировать выход по таймеру-триггеру и "закрытие" сети.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #33639866
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Urri!

Дык оно понятно, что тут главное :) Главное чтобы все данные из буфера
клиента были уже на сервере к моменту "обрезания сети" - но я себе слабо
представляю каким средствами этого можно добиться (не в том смысле, что
"скорее всего данные будут сброшены, т.к. они не будут часами висеть в кэше
клиента", а именно - "100% что данные будут сброшены - при любых условиях").

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #33639979
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну хорошо, а что будет, если даже закешированные данные будут изменены, но изменения не будут сброшены в базу?
Ежели программа написана с учетом принципов транзакционности, т.е. не допускает промежуточных статусов - разве отрыв клиента от сервера на что-то повлияет? Он же до момента отрыва от сети из базы только читал данные, а правил только свой личный буфер.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #33640086
foxwizard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерзакрытия формы при неактивности пользователя определенное время.
Не мое!
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #33642343
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Urri!

> Ну хорошо, а что будет, если даже закешированные данные будут изменены, но
> изменения не будут сброшены в базу?

Проблема не совсем в этом...
Просто процесс "изменения данных" обычно достаточно сложен, и затрагивает не
один файл, а несколько, и что также важно - в рамках одного и того-же файла
меняются разные участки (классический пример с INSERT - меняется заголовок
dbf - счётчик записей и меняется "хвост" dbf - собственно сама запись). Если
разрыв связи произойдёт "посередине", то есть хороший шанс получить сбойную
таблицу. Nowell сам по себе никак такую порчу не отследит - он в структурах
фоксовых файлов не разбирается :) и тем более не знает что "вот это"
изменение в dbf связано с изменениями с cdx и fpt. Так что только
использование явных Nowell-оских транзакций из клиентской программы может
помочь - а этим зачастую пренебрегают, считая что одной лишь установки
транзакционного атрибута на файл будет достаточно... Конечно я предполагаю,
что Nowell+его Win клиент абсолютно корректно обрабатывают ситуацию с
разрывом связи "посередине" выполняющейся (явной) файловой транзакции - хотя
мне кажется, что некорректная настройка сервера и/или клиента могут даже тут
вызывать вопросы.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #33642391
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно, Игорь, ты о том, что нельзя отрывать клиента от сети в момент, когда он осуществляет запись. Тут соглашусь.

Короче говоря, уверен, что, хотя из программы не вышли, в ней не работают - отрывай от сети. Не уверен - не отрывай, ибо может(гут) испортиться таблица(ы).
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Принудительное завершение программы
    #38209472
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В программе есть таймер. Раз в десять минут проверяет время - если время больше установленного для выхода - пытается завершить программу.

Тут как-то все очень печально. Не всегда завершает. Куда копать? Какой алгоритм? Бывает что открыто куча окон у юзера, кое-где еще работают циклы с разными задачами - запустил отчет и ушел.. Иногда выходит - иногда пишет ошибку, что алиаса нет и все такое.. Потыкал немного, но всех вариантов не испробуешь.. Если в одном закрывает - перестает в другом закрывать. Нужна стратегия. Кто владеет?
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38209566
gore-egor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaestroEv,

делай предупредительный выстрел в messagebox
если не понял - убивай
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38209602
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хороший метод, но не гуманный. :) Есть что-нить программное?
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38209631
gore-egor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaestroEvХороший метод, но не гуманный . :) Есть что-нить программное?это почему? перед убийством программно нажимай на кнопки сохранения.
и еще время дай перед тем как ))
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38209723
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понял, что непонял.. Убивай - вот тут проблема. QUIT по таймеру и прочие CLOSE штуки не ведут к выходу из программы в любом месте. В каждом месте свои нужно делать телодвижения иначе ошибка.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38209837
gore-egor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaestroEv,

дежавю
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38209938
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gore-egorMaestroEv,

дежавю
Убивание процесса средствами виндовса допустимо если база на SQL-сервере, если это DBF то чревато тем что фокс может не успеть сбросит все из кэша на диск, как следствие порушатся индексы, возможно какая DBF перестанет открываться.

Думаю стандартного решения у этой проблемы нет, на это надо заранее закладываться. Например в каждой форме предусмотреть метод, вызвав который форма без вопросов закроется. И вызывать этот метод при автозакрытии.
Можно попробовать тупо игнорировать все ошибки при закрытии, но тут тоже нет гарантии что при этом прога не подвиснет и не зациклится.

Если принципиально закрыть любой ценой, то есть смысл скомбинировать оба метода, сначала запускается внешний процесс (сама же прога с каким то параметром), затем начинается штатное закрытие. Задача внешней проги выждать паузу и если после паузы исходный процесс существует - убить его средствами ОС.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38210088
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tgore-egorMaestroEv,

дежавю
Убивание процесса средствами виндовса допустимо если база на SQL-сервере, если это DBF то чревато тем что фокс может не успеть сбросит все из кэша на диск, как следствие порушатся индексы, возможно какая DBF перестанет открываться.

Думаю стандартного решения у этой проблемы нет, на это надо заранее закладываться. Например в каждой форме предусмотреть метод, вызвав который форма без вопросов закроется. И вызывать этот метод при автозакрытии.
Можно попробовать тупо игнорировать все ошибки при закрытии, но тут тоже нет гарантии что при этом прога не подвиснет и не зациклится.

Если принципиально закрыть любой ценой, то есть смысл скомбинировать оба метода, сначала запускается внешний процесс (сама же прога с каким то параметром), затем начинается штатное закрытие. Задача внешней проги выждать паузу и если после паузы исходный процесс существует - убить его средствами ОС.

Интересные идеи ...
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38210089
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEvВ программе есть таймер. Раз в десять минут проверяет время - если время больше установленного для выхода - пытается завершить программу.

Тут как-то все очень печально. Не всегда завершает. Куда копать? Какой алгоритм? Бывает что открыто куча окон у юзера, кое-где еще работают циклы с разными задачами - запустил отчет и ушел.. Иногда выходит - иногда пишет ошибку, что алиаса нет и все такое.. Потыкал немного, но всех вариантов не испробуешь.. Если в одном закрывает - перестает в другом закрывать. Нужна стратегия. Кто владеет?

Это вами написанная программа или вы осваиваете чужую?
У вас в программе должны быть стандартные процедуры выхода из нее по ON SHUTDOWN, при критических ошибках, от кнопок, из меню и т.п.
В том числе должно быть закрытие всех открытых окон и таблиц.
По идее, для вашего таймера должна быть такая же стратегия, с подкорректировкой нюансов.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38210189
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38212072
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что ж мы сразу то или убить пользователя или убить процесс.

Ладно, упростим задачу. Выключить надо не резко, а в принципе. Ночь большая. Выключить и все. Дождаться всех незавершенных циклов если есть и выключить так как это бы сделал юзер последовательно закрывая все окошки и нажав <выход>.

Серверу утром нужен монопольный режим и у нас вся ночь на выход из программы.
Давайте опишем стратегию, а не реализацию. К реализации перейдем после понимания того что, когда и где надо делать.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38212117
MaestroEvЧто ж мы сразу то или убить пользователя или убить процесс.

Ладно, упростим задачу. Выключить надо не резко, а в принципе. Ночь большая. Выключить и все. Дождаться всех незавершенных циклов если есть и выключить так как это бы сделал юзер последовательно закрывая все окошки и нажав <выход>.

Серверу утром нужен монопольный режим и у нас вся ночь на выход из программы.
Давайте опишем стратегию, а не реализацию. К реализации перейдем после понимания того что, когда и где надо делать.
1. И как Вы собираетесь это отслеживать незавершенные циклы? Единственное решение - писать куда-то стек активных (работающих) процедур и функций... А если программа вдруг ушла в "бесконечный цикл" (мало ли, иногда встречается даже на давно работающих программах)?
2. Как Вы собираетесь выключать программу? Программа = "черный ящик". А вся интерактивность - она находится внутри программы. И повлиять на ее завершение иначе как принудительно "убив" процесс Вы не можете. Если же Вы будете ждать завершения программы, которая в свою очередь ждет действий от пользователя (например, ввод недостающих для расчета данных), то рискуете ничего не дождаться.

По-моему, есть только одно адекватное решение Вашей ситуации: отойти от Фокса и оформлять все Ваши программы в виде сервисов Windows. Тогда Вы сможете послать им сигнал завершения (соответствующий ключ в командной строке), а программа сможет корректно завершить свою работу...
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38212120
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В свое время долгие мучения на тему юзера, который "забыл" выключиться привели к простому решению при условии не-архи-критичности ещенощной индексации:
"забыл" выключиться - остался без ужина!
2-3 "резонансных" случая на контору - и никаких проблем уже десяток лет...
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38212122
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
е ж енощной... сорри...
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38212125
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEvДавайте опишем стратегию, а не реализацию. К реализации перейдем после понимания того что, когда и где надо делать.
Что ж, давайте попробуем. В принципе, ответ Вам уже дали:Dima TДумаю стандартного решения у этой проблемы нет, на это надо заранее закладываться. Например в каждой форме предусмотреть метод, вызвав который
форма без вопросов закроется. И вызывать этот метод при автозакрытии.
Теперь подробнее. Это вроде уже есть:
MaestroEvВ программе есть таймер. Раз в десять минут проверяет время - если время больше установленного для выхода - пытается завершить программу.
Во-первых, надо ставить (программно, вручную) некий индикатор "требуется завершение программы". У меня создается файлик в общей
рабочей папке на сервере и основная форма по таймеру проверяет раз в 30 минут его наличие. Если появился - сообщение (содержимое этого txt-файлика, т.е. текст сообщения можно менять при создании) всем активным юзерам и блокировка запуска для новых юзеров.
Одновременно включается признак "принудительного завершения" - глобальная переменная=.T. Есть еще переменная, соответствующая
"уровню формы". Она не дает закрыться родительской форме, пока не закрыты все дочерние.
Таймеров должно быть несколько - на каждую форму. Код Timer() примерно такой:

Код: plsql
1.
2.
3.
4.
IF gnLevel=3 AND glExit
*  Thisform.cmdSave.Click()    && в некоторых формах этого нет, не нужно
  Thisform.cmdExit.Click()
ENDIF


Если есть какие-то большие циклы, то соответствующий таймер надо притормаживать перед ними и опять запускать по их завершении.

М-да, получилось как-то сумбурно и не подробно (всего сейчас просто не помню), но идея, я думаю, понятна.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38212278
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEvЧто ж мы сразу то или убить пользователя или убить процесс.

Ладно, упростим задачу. Выключить надо не резко, а в принципе. Ночь большая. Выключить и все. Дождаться всех незавершенных циклов если есть и выключить так как это бы сделал юзер последовательно закрывая все окошки и нажав <выход>.

Серверу утром нужен монопольный режим и у нас вся ночь на выход из программы.
Давайте опишем стратегию, а не реализацию. К реализации перейдем после понимания того что, когда и где надо делать.
Готового решения у меня нет, не было необходимости такую задачу решать. Ниже по какому бы пути я пошел решая эту задачу.

Без убивания процесса тут никак, но это крайняя мера, поэтому я бы так сделал:
первым запускается этот же EXE c параметрами
Код: sql
1.
2.
lcPid = alltrim(str(_vfp.ProcessId))
run /n My.exe kill &lcPid


Новый сразу получает хэндл по lcPid и ждет заданное время, например 10 минут, в которые основной должен закрыться своими силами. По истечении времени убивает. Сразу получить хэндл важно, т.к. процесс может закрыться и через 10 минут может появиться другой с этим же ProcessId, т.е. убъем непонятно кого.

Например если вышел MessageBox то ничего ты с ним программно не сделаешь.
Надо еще проверить срабатывает ли вообще таймер когда активна не форма:
1. MessageBox()
2. при выборе файла GetFile()/LocFile() и т.п.
3. REPORT выведен на предпросмотр, открыт выбор принтера (если PROMPT используется в REPORT).

Теперь сам алгоритм закрывания:
Часть 1. Пробуем закрыть средствами проги
берем _screen.activeform или если нет такой первую попавщуюся из коллекции _vfp.forms()
1.1 проверяем наличие метода SilentRelease() - если есть запускаем, туда должен быть прописан код закрытия формы без задавания вопросов. иначе переходим к 1.2.
1.2. Ищем кнопку cmdCancel если есть делаем cmdCancel.Click() - но это в случае если кнопка "Отмена" всегда называется cmdCancel и никогда не задает вопросов с помощью MessageBox(). У меня обычно именно так. Иначе п. 1.3
1.3. вызываем Release() формы
за одно срабатывание таймера такое проделывать только с одной формой, т.к. по закрытию формы генерятся всякие сообщения, становятся в очередь и надо дать фоксу их обработать перед тем как переходить к следующей форме.

Еще надо как-то определять что открыт REPORT на предпросмотр, тут ничего не подскажу, не разбирался ни разу с этим вопросом. Закрыть репорт можно попробовать с помощью KEYBOARD "CTRL+W"

Часть 2. Закрытие таблиц.
переребираем все DATASESSION и в каждой делаем CLOSE DATA ALL.

ну и в конце
Код: sql
1.
2.
3.
on shutdown
clear events
quit


Тут возможно появление ошибок в Destroy() объектов которые существуют на этот момент.

PS Ну и писать лог всех действий таймера и все вызовы код из таймера обернуть в TRY ... CATCH
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38212631
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TНапример если вышел MessageBox то ничего ты с ним программно не сделаешь. А так:
Код: plsql
1.
KEYBOARD '{ENTER}' PLAIN CLEAR

Главное, чтобы messagebox был правильно настроен (нужная кнопка по умолчанию).
Dima TЕще надо как-то определять что открыт REPORT на предпросмотр, тут ничего не подскажу, не разбирался ни разу с этим вопросом.
Закрыть репорт можно попробовать с помощью KEYBOARD "CTRL+W" Тоже не проблема:
Код: plsql
1.
2.
3.
4.
5.
6.
IF WEXIST('Print Preview')
  Release Window "Print Preview"
ENDIF
IF WEXIST('Предварительный просмотр')
  Release Window "Предварительный просмотр"
ENDIF
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38212677
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonny540Dima TНапример если вышел MessageBox то ничего ты с ним программно не сделаешь. А так:
Код: plsql
1.
KEYBOARD '{ENTER}' PLAIN CLEAR

Главное, чтобы messagebox был правильно настроен (нужная кнопка по умолчанию).
Тоже такая мысль появилась, правда после того как запостил. Что касается кнопки по умолчанию: MessageBox еще на кнопки "Д", "Н" и т.д. реагирует, буквы на кнопках подчеркнуты. Тут только возникает вопрос как из таймера определить что на экране MessageBox() висит? Ну и убедиться что сработает таймер в этот момент, а не будет ждать пока пользователь что-нибудь ответит.

Тема неизученная, надо просто протестить все подозрительные варианты и придумать их обработку.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38212722
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТут только возникает вопрос как из таймера определить что на экране MessageBox() висит?В этом все и дело. Пока не приходилось проверять, надо попробовать.
А вообще-то неплохо бы в программе предусмотреть, когда выдавать мессбокс, а когда нет.Dima TНу и убедиться что сработает таймер в этот момент в этот момент, а не будет ждать пока пользователь что-нибудь ответитТут проще - если "маячок" горит, значит пользователь уже ушел от нас и ничего он уже никогда никому не ответит
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38212760
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEv,

И еще: принудительное корректное закрытие приложения - штука довольно мозгоемкое (так и просится другое слово ),
особенно если много всяких форм, отчетов и т.д. Если ты этого действительно хочешь - флаг в руки и барабан на шею. Чем можем - поможем.
Чем унифицированней формы, кнопки, код... - тем лучше. Если неохота этим заниматься - то 14133592
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38212767
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonny540Dima TТут только возникает вопрос как из таймера определить что на экране MessageBox() висит?В этом все и дело. Пока не приходилось проверять, надо попробовать.
А вообще-то неплохо бы в программе предусмотреть, когда выдавать мессбокс, а когда нет.Dima TНу и убедиться что сработает таймер в этот момент в этот момент, а не будет ждать пока пользователь что-нибудь ответитТут проще - если "маячок" горит, значит пользователь уже ушел от нас и ничего он уже никогда никому не ответит


Вопрос вообще-то по другому стоит
MaestroEvСерверу утром нужен монопольный режим и у нас вся ночь на выход из программы.
т.е. пользователь в конце рабочего дня встал, оделся и ушел, точнее свалил по-быстрому забыв закрыть прогу и выключить комп. Прога может и на MessageBox`е остаться открыта. В любом состоянии может остаться.

Твой "маячок" вообще бесполезен если за компом никого нет и ничего в проге не делается. Ты же исходишь из того что пользователь своей активностью запустит проверку "маячка", а дальше отработает нужный тебе код. А тут нет пользователя.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38212782
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonny540Если неохота этим заниматься - то 14133592
Не всегда возможно. Если ты сторонний разработчик, то может появиться доминирующее мнение "это не мы криворукие, это разработчик прогу корявую написал". Особенно если местный админ забывает прогу закрывать и комп выключать.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38212823
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТвой "маячок" вообще бесполезен если за компом никого нет и ничего в проге не делается. Ты же исходишь из того что пользователь своей активностью
запустит проверку "маячка", а дальше отработает нужный тебе код. А тут нет пользователя.
А юзер и не нужен, если есть таймер. Messagebox великолепно удаляется и без юзера, только что проверил.
А "маячок" зажигается админом приложения и от юзера уже мало зависит, сохранится и завершится и без него :) 14133599
Во всяком случае у меня эта схема работает довольно давно без каких либо сложностей.

ЗЫ То, что коряво ее описал, это другой вопрос.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38212833
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное вот что забыл сказать: маячок зажигается с любой доступной машины в сети, вход с паролем админа приложения.
И все, таймер затикал, все остальные могут собирать манатки...
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38212990
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonny540Messagebox великолепно удаляется и без юзера

У Messagebox() есть параметр таймаут (как-бы нет смысла в висении его часами)
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38213181
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XAndyУ Messagebox() есть параметр таймаут (как-бы нет смысла в висении его часами)Это не всегда удобно, если юзер все-таки еще не совсем ушел (скажем, покурить).
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38213202
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XAndyJonny540Messagebox великолепно удаляется и без юзера

У Messagebox() есть параметр таймаут (как-бы нет смысла в висении его часами)

Есть такое, я сначала даже начал пользоваться, только потом выяснилось что при указании таймаута возникает нездоровый побочный эффект - если кликнуть мимо окошка Messagebox() то он уходит на задний план (за окно фокса) и прога выглядит зависшей. Можно конечно задать поверх всех окон (+4096 во втором параметре), тогда оно вылазит в центре экрана даже если окно самой проги скрыто под другими, что тоже не очень хорошо.
А без таймаута все нормально, окошко в центре окна фокса, за него не прячется и поверх других не лезет

Не знаю почему такая багофича у разработчиков фокса получилась, но моим пользователям это сильно не понравилось. Пришлось отказаться от ее использования.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38213237
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonny540Dima TТвой "маячок" вообще бесполезен если за компом никого нет и ничего в проге не делается. Ты же исходишь из того что пользователь своей активностью
запустит проверку "маячка", а дальше отработает нужный тебе код. А тут нет пользователя.
А юзер и не нужен, если есть таймер. Messagebox великолепно удаляется и без юзера, только что проверил.
А "маячок" зажигается админом приложения и от юзера уже мало зависит, сохранится и завершится и без него :) 14133599
Во всяком случае у меня эта схема работает довольно давно без каких либо сложностей.

ЗЫ То, что коряво ее описал, это другой вопрос.
Тут ты опять от темы отходишь. Вопрос ведь стоит "как закрыть", а "не как определить момент закрытия". Мы с тобой о разных вещах говорим. Я о "как закрыть".
Пусть MaestroEv сам решает какой из вопросов его интересует.

PS Кстати про программное определение того что MessageBox() висит ты ничего не написал :)
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38213385
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TМы с тобой о разных вещах говорим. Я о "как закрыть" Я тоже.

Dima TPS Кстати про программное определение того что MessageBox() висит ты ничего не написал :)Писал уже:Jonny540 Dima TТут только возникает вопрос как из таймера определить что на экране MessageBox() висит?В этом все и дело. Пока не приходилось проверять, надо попробовать.
А вообще-то неплохо бы в программе предусмотреть, когда выдавать мессбокс, а когда нет.Пока не пробовал еще, м.б. завтра :)

И, действительно, пусть ТС решает, а то он что-то молчит. :) Ладно, пусть пока переваривает советы.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38213603
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonny540И, действительно, пусть ТС решает, а то он что-то молчит.
Спит он уже. У него часовой пояс Москва+6 часов :)
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38213687
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tпотом выяснилось что при указании таймаута возникает нездоровый побочный эффект - если кликнуть мимо окошка Messagebox() то он уходит на задний план (за окно фокса) и прога выглядит зависшей. Можно конечно задать поверх всех окон (+4096 во втором параметре), тогда оно вылазит в центре экрана даже если окно самой проги скрыто под другими

Вот как, не знал (пользуюсь своим Messagebox'ом)
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38214117
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TXAndyпропущено...


У Messagebox() есть параметр таймаут (как-бы нет смысла в висении его часами)

Есть такое, я сначала даже начал пользоваться, только потом выяснилось что при указании таймаута возникает нездоровый побочный эффект - если кликнуть мимо окошка Messagebox() то он уходит на задний план (за окно фокса) и прога выглядит зависшей. Можно конечно задать поверх всех окон (+4096 во втором параметре), тогда оно вылазит в центре экрана даже если окно самой проги скрыто под другими, что тоже не очень хорошо.
А без таймаута все нормально, окошко в центре окна фокса, за него не прячется и поверх других не лезет

Не знаю почему такая багофича у разработчиков фокса получилась, но моим пользователям это сильно не понравилось. Пришлось отказаться от ее использования.

Это не "багофича", а так задумано. Разумеется, если проверять в реальных кодах.

Из хелпа:
MESSAGEBOX() возвращает значение -1, когда происходит задержка времени.
В этом и суть - в нужных случаях это значение можно обрабатывать программно и без ваших "пользователей".

MESSAGEBOX() это не только фоксовская функция:
#DEFINE MB_APPLMODAL 0x0 && пользователь может перемещаться в окнах других прикладных программ и работать в этих окнах.
#DEFINE MB_SYSTEMMODAL 0x1000 && чтобы уведомлять пользователя о серьезных, потенциально опасных ошибках, которые требуют немедленного внимания
#DEFINE MB_TASKMODAL 0x2000 && вызывающая прикладная программа или библиотека не имеют доступного дескриптора окна, но все еще должны сохранять вводимые данные для других окон в текущей прикладной программе

ЗЫ. Вам впору уже свои идеи патентовать ...
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38214122
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЧасть 1. Пробуем закрыть средствами проги
берем _screen.activeform или если нет такой первую попавщуюся из коллекции _vfp.forms()


Интересно, если подробнее ... как вы ловите свою "первую попавщуюся".
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38214204
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12Это не "багофича", а так задумано. Разумеется, если проверять в реальных кодах.
MSDN сам переводил или скопипастил у кого?

Ты проверь сначала что это работает, прежде чем сюда писать. Покажи что я должен написать чтобы не иметь обе проблемы:
1. если кликнуть в окно фокса мимо окошка Messagebox() то оно уходит на задний план (за окно фокса) и прога выглядит зависшей
2. окно Messagebox() не должно вылазить в центре экрана поверх всех окон если окно фокса скрыто под другими
т.е. поведение окна Messagebox() при вызове с указанием таймаута должно быть такое же как и при вызове его без указания таймаута.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38214411
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТы проверь сначала что это работает, прежде чем сюда писать. Покажи что я должен написать чтобы не иметь обе проблемы:
1. если кликнуть в окно фокса мимо окошка Messagebox() то оно уходит на задний план (за окно фокса) и прога выглядит зависшей
2. окно Messagebox() не должно вылазить в центре экрана поверх всех окон если окно фокса скрыто под другими
т.е. поведение окна Messagebox() при вызове с указанием таймаута должно быть такое же как и при вызове его без указания таймаута.

Мои сочувствия по поводу нехорошего поведения окон в Windows.
Попробуйте написать свой MESSAGEBOX(), под себя.
Разумеется, если сумеете - классы.
Где-то на Фоксклубе был образец.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38214428
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так хорошо тема шла... Пришел <censored> и в своей обычной манере начал <censored> .
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38214436
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12Попробуйте написать свой MESSAGEBOX(), под себя.
Достал. Я тебе уже говорил что не надо троллить в чужих топиках.

PS Не говори мне что я должен делать и я не скажу куда тебе идти. .
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38214448
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMТак хорошо тема шла... Пришел <censored> и в своей обычной манере начал <censored> .

Извиняюсь, ТС что-то молчит.
А тема действительно интересная.
Особенно, если сравниваешь начало темы - 2006 г с нынешним 2013 г.
Так быстро в Фоксе летит время, актуально - словно вчера писали.

Так все-же - в каком цикле закрыть открытые репорты?

ДимаТ. Вы же сами меня просили: - "Покажи что я должен написать чтобы не иметь обе проблемы ..."
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38214632
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.
1. Попробую сделать класс в котором буду хранить список окон в порядке их открытия.
2. Все таки хочу закрывать формы "РУКАМИ" эмулируя нажатия на клавиши, чтобы не разбираться что там и как в самих окнах.
3. Репортов мало - надо убить сосем.
4. Мessagebox .. вроде в нем был параметр сколько ждать нажатия пользователя.... он сам вывалится.
5. РОботы работают не покладая рук, а в циклах есть DOEVENTS и возможно таймер иногда просится на выход внутри цикла
- надо разобраться и с этим. Таймер не выключает все сам, а кидает файлик - просим всех на выход,
а циклы его проверяют и если он есть - выходят.

Ничего не забыл?
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38214792
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tпро программное определение того что MessageBox() висит ты ничего не написал :)Обещал - проверил. Это такое же окно, как и остальные, только вот если заголовок пустой - фига :((
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
LOCAL loShell, lcCaption  
loShell=CreateObject("WScript.Shell")      
lcCaption = "Заголовок messagebox - 3-й параметр"  
IF loShell.AppActivate(m.lcCaption) = .T.  
  WAIT WIND 'YES'
ELSE  
  WAIT WIND 'NO'
ENDIF

Правда, там могут, наверное, еще нюансы быть (активное, неактивное, etc).
Код нашел на форуме. :)
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38215332
Pulsar_p
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята, эта проблема подробно рассмотрена в книге Клепинина и Агафоновой: глава 28, п.26 (стр 1015)
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38215823
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEv1. Попробую сделать класс в котором буду хранить список окон в порядке их открытия.
Можно проще: создать у формы свойство ThisForm.tCreate и писать туда дату-время открытия. При выходе перебрать коллекцию _screen.Forms() и найти форму с минимальным tCreate
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38215867
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEv,
Советов море, но основной такой - для каждого конкретного приложения нужен свой уникальный алгоритм.

Pulsar_p, К сожалению, мне пришлось делать это еще до выхода книги.

Dima T,
Если хочешь, почитай еще советы . Не удивлюсь, если еще на паре-тройке форумов сейчас это обсуждают :)
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38216043
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonny540Dima T,
Если хочешь, почитай еще советы . Не удивлюсь, если еще на паре-тройке форумов сейчас это обсуждают :)
Лично мне эта проблема не актуальна. И думаю уже никогда ее решать не придется.
Из того что написано на DBF имеет небольшие базы и несколько пользователей. Служебные операции типа индексирования выполняются при входе первого пользователя в сутках, а также при первом входе после любого вылета программы.
Там где базы большие - MSSQL, с ним вообще нет необходимости монопольного запуска для чего-либо.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38216140
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TJonny540Dima T,
Если хочешь, почитай еще советы . Не удивлюсь, если еще на паре-тройке форумов сейчас это обсуждают :)
Лично мне эта проблема не актуальна. И думаю уже никогда ее решать не придется.
Из того что написано на DBF имеет небольшие базы и несколько пользователей. Служебные операции типа индексирования выполняются при входе первого пользователя в сутках, а также при первом входе после любого вылета программы.
Там где базы большие - MSSQL, с ним вообще нет необходимости монопольного запуска для чего-либо.

Т.е. практически это у вас сводится к нескольким SELECT-ам, а приложением считается основная форма с парочкой подчиненных.

В реальной же практике закрытие всего открытого порой вызывает серьезные затруднения.
Поэтому и господствует тезис, что лучше решать все конкретно и каждый раз надо открывать Америку.
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38216285
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12Т.е. практически это у вас сводится к нескольким SELECT-ам, а приложением считается основная форма с парочкой подчиненных.
Ты когда уже книгу про меня напишешь? а то все переспрашиваешь по мелочи.
ты давай - инфу по форуму собери, напиши книгу, черновик покажешь - я подкорректирую
...
Рейтинг: 0 / 0
Принудительное завершение программы
    #38216337
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tsg12Т.е. практически это у вас сводится к нескольким SELECT-ам, а приложением считается основная форма с парочкой подчиненных.
Ты когда уже книгу про меня напишешь? а то все переспрашиваешь по мелочи.
ты давай - инфу по форуму собери, напиши книгу, черновик покажешь - я подкорректирую

Интересная идея, но инфа без обсуждения, что "свадьба без невесты".
Да и модератор начеку, свое дело знает - в Пустотреп выгонит.
А так было бы интересно наглядно на примере проследить пути глупостей в Фокспро - как при процедурном программировании можно годами толочь воду в ступе.
...
Рейтинг: 0 / 0
60 сообщений из 60, показаны все 3 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Принудительное завершение программы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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