|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Добрый день всем! Вопрос такой. Ночью проводится переиндексация. Нужен монопольный доступ. Но один ... периодически не выходит из программы в конце работего дня и так и оставляет компьютер на ночь (опечатывая дверь). Уходит он поздно, так что стоять и ждать его невозможно. Есть ли способ с другого компа завершить его программу? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2006, 10:22 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Если у тебя есть права, то RAdmin тебе в помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2006, 10:26 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Объявить ему строгий выговор. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2006, 10:27 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Чья прога? Если твоя, включи на тулбаре таймер, и в указанное время CLOSE DATABASE ALL и прогу не закрывать,а после этого времени, запускай индексации, упаковки прочую лабудень... А хошь, можно потом и QUIT вставить... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2006, 10:32 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Пусть сервер выбрасывает пользователей из сети в обусловленное время. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2006, 11:18 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Всем спасибо! Буду экспериментировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2006, 11:28 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Hi Urri! Опасно - как раз может "накрыться" таблица при таком жестоком способе. Программа должна быть закрыта по возможности штатно - для чего как раз и подойдёт таймер и возможно файл-триггер (как только таймер увидел файл - он корректно закрывает программу). Также, если программа написана правильно, и имеет адекватный обработчик ON SHUTDOWN, то можно просто удалённо выключать/перегружать этот нехороший компьютер - при штатном завершении сеанса Windows все программы закрываются (причём не аварийно, а "нормально"). А удалённо перегрузить любую машину не составляет проблем - например утилитой shutdown ;) Posted via ActualForum NNTP Server 1.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2006, 02:40 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Igor Korolyov Hi Urri! Опасно - как раз может "накрыться" таблица при таком жестоком способе. Программа должна быть закрыта по возможности штатно - для чего как раз и подойдёт таймер и возможно файл-триггер (как только таймер увидел файл - он корректно закрывает программу). Также, если программа написана правильно, и имеет адекватный обработчик ON SHUTDOWN, то можно просто удалённо выключать/перегружать этот нехороший компьютер - при штатном завершении сеанса Windows все программы закрываются (причём не аварийно, а "нормально"). А удалённо перегрузить любую машину не составляет проблем - например утилитой shutdown ;) Posted via ActualForum NNTP Server 1.3Практика (на Novell) показывает, что не опасно. Главное, чтобы в это время пользователь был неактивен. Ну и еще программа должна быть написана так, чтобы данные начинали и заканчивали писаться в таблицы по одному действию пользователя, а не двум разным. Впрочем, я и сам за штатное закрытие. Т.е. полезно комбинировать выход по таймеру-триггеру и "закрытие" сети. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2006, 14:24 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Hi Urri! Дык оно понятно, что тут главное :) Главное чтобы все данные из буфера клиента были уже на сервере к моменту "обрезания сети" - но я себе слабо представляю каким средствами этого можно добиться (не в том смысле, что "скорее всего данные будут сброшены, т.к. они не будут часами висеть в кэше клиента", а именно - "100% что данные будут сброшены - при любых условиях"). Posted via ActualForum NNTP Server 1.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2006, 20:09 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Ну хорошо, а что будет, если даже закешированные данные будут изменены, но изменения не будут сброшены в базу? Ежели программа написана с учетом принципов транзакционности, т.е. не допускает промежуточных статусов - разве отрыв клиента от сервера на что-то повлияет? Он же до момента отрыва от сети из базы только читал данные, а правил только свой личный буфер. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2006, 23:21 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Примерзакрытия формы при неактивности пользователя определенное время. Не мое! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2006, 06:33 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Hi Urri! > Ну хорошо, а что будет, если даже закешированные данные будут изменены, но > изменения не будут сброшены в базу? Проблема не совсем в этом... Просто процесс "изменения данных" обычно достаточно сложен, и затрагивает не один файл, а несколько, и что также важно - в рамках одного и того-же файла меняются разные участки (классический пример с INSERT - меняется заголовок dbf - счётчик записей и меняется "хвост" dbf - собственно сама запись). Если разрыв связи произойдёт "посередине", то есть хороший шанс получить сбойную таблицу. Nowell сам по себе никак такую порчу не отследит - он в структурах фоксовых файлов не разбирается :) и тем более не знает что "вот это" изменение в dbf связано с изменениями с cdx и fpt. Так что только использование явных Nowell-оских транзакций из клиентской программы может помочь - а этим зачастую пренебрегают, считая что одной лишь установки транзакционного атрибута на файл будет достаточно... Конечно я предполагаю, что Nowell+его Win клиент абсолютно корректно обрабатывают ситуацию с разрывом связи "посередине" выполняющейся (явной) файловой транзакции - хотя мне кажется, что некорректная настройка сервера и/или клиента могут даже тут вызывать вопросы. Posted via ActualForum NNTP Server 1.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2006, 02:34 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Понятно, Игорь, ты о том, что нельзя отрывать клиента от сети в момент, когда он осуществляет запись. Тут соглашусь. Короче говоря, уверен, что, хотя из программы не вышли, в ней не работают - отрывай от сети. Не уверен - не отрывай, ибо может(гут) испортиться таблица(ы). ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2006, 06:22 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
В программе есть таймер. Раз в десять минут проверяет время - если время больше установленного для выхода - пытается завершить программу. Тут как-то все очень печально. Не всегда завершает. Куда копать? Какой алгоритм? Бывает что открыто куча окон у юзера, кое-где еще работают циклы с разными задачами - запустил отчет и ушел.. Иногда выходит - иногда пишет ошибку, что алиаса нет и все такое.. Потыкал немного, но всех вариантов не испробуешь.. Если в одном закрывает - перестает в другом закрывать. Нужна стратегия. Кто владеет? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 16:18 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
MaestroEv, делай предупредительный выстрел в messagebox если не понял - убивай ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 16:44 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Хороший метод, но не гуманный. :) Есть что-нить программное? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 16:54 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
MaestroEvХороший метод, но не гуманный . :) Есть что-нить программное?это почему? перед убийством программно нажимай на кнопки сохранения. и еще время дай перед тем как )) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 17:03 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Я понял, что непонял.. Убивай - вот тут проблема. QUIT по таймеру и прочие CLOSE штуки не ведут к выходу из программы в любом месте. В каждом месте свои нужно делать телодвижения иначе ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 17:34 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
MaestroEv, дежавю ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 18:37 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
gore-egorMaestroEv, дежавю Убивание процесса средствами виндовса допустимо если база на SQL-сервере, если это DBF то чревато тем что фокс может не успеть сбросит все из кэша на диск, как следствие порушатся индексы, возможно какая DBF перестанет открываться. Думаю стандартного решения у этой проблемы нет, на это надо заранее закладываться. Например в каждой форме предусмотреть метод, вызвав который форма без вопросов закроется. И вызывать этот метод при автозакрытии. Можно попробовать тупо игнорировать все ошибки при закрытии, но тут тоже нет гарантии что при этом прога не подвиснет и не зациклится. Если принципиально закрыть любой ценой, то есть смысл скомбинировать оба метода, сначала запускается внешний процесс (сама же прога с каким то параметром), затем начинается штатное закрытие. Задача внешней проги выждать паузу и если после паузы исходный процесс существует - убить его средствами ОС. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 19:40 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Dima Tgore-egorMaestroEv, дежавю Убивание процесса средствами виндовса допустимо если база на SQL-сервере, если это DBF то чревато тем что фокс может не успеть сбросит все из кэша на диск, как следствие порушатся индексы, возможно какая DBF перестанет открываться. Думаю стандартного решения у этой проблемы нет, на это надо заранее закладываться. Например в каждой форме предусмотреть метод, вызвав который форма без вопросов закроется. И вызывать этот метод при автозакрытии. Можно попробовать тупо игнорировать все ошибки при закрытии, но тут тоже нет гарантии что при этом прога не подвиснет и не зациклится. Если принципиально закрыть любой ценой, то есть смысл скомбинировать оба метода, сначала запускается внешний процесс (сама же прога с каким то параметром), затем начинается штатное закрытие. Задача внешней проги выждать паузу и если после паузы исходный процесс существует - убить его средствами ОС. Интересные идеи ... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 22:30 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
MaestroEvВ программе есть таймер. Раз в десять минут проверяет время - если время больше установленного для выхода - пытается завершить программу. Тут как-то все очень печально. Не всегда завершает. Куда копать? Какой алгоритм? Бывает что открыто куча окон у юзера, кое-где еще работают циклы с разными задачами - запустил отчет и ушел.. Иногда выходит - иногда пишет ошибку, что алиаса нет и все такое.. Потыкал немного, но всех вариантов не испробуешь.. Если в одном закрывает - перестает в другом закрывать. Нужна стратегия. Кто владеет? Это вами написанная программа или вы осваиваете чужую? У вас в программе должны быть стандартные процедуры выхода из нее по ON SHUTDOWN, при критических ошибках, от кнопок, из меню и т.п. В том числе должно быть закрытие всех открытых окон и таблиц. По идее, для вашего таймера должна быть такая же стратегия, с подкорректировкой нюансов. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 22:31 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2013, 00:33 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Что ж мы сразу то или убить пользователя или убить процесс. Ладно, упростим задачу. Выключить надо не резко, а в принципе. Ночь большая. Выключить и все. Дождаться всех незавершенных циклов если есть и выключить так как это бы сделал юзер последовательно закрывая все окошки и нажав <выход>. Серверу утром нужен монопольный режим и у нас вся ночь на выход из программы. Давайте опишем стратегию, а не реализацию. К реализации перейдем после понимания того что, когда и где надо делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 03:01 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
MaestroEvЧто ж мы сразу то или убить пользователя или убить процесс. Ладно, упростим задачу. Выключить надо не резко, а в принципе. Ночь большая. Выключить и все. Дождаться всех незавершенных циклов если есть и выключить так как это бы сделал юзер последовательно закрывая все окошки и нажав <выход>. Серверу утром нужен монопольный режим и у нас вся ночь на выход из программы. Давайте опишем стратегию, а не реализацию. К реализации перейдем после понимания того что, когда и где надо делать. 1. И как Вы собираетесь это отслеживать незавершенные циклы? Единственное решение - писать куда-то стек активных (работающих) процедур и функций... А если программа вдруг ушла в "бесконечный цикл" (мало ли, иногда встречается даже на давно работающих программах)? 2. Как Вы собираетесь выключать программу? Программа = "черный ящик". А вся интерактивность - она находится внутри программы. И повлиять на ее завершение иначе как принудительно "убив" процесс Вы не можете. Если же Вы будете ждать завершения программы, которая в свою очередь ждет действий от пользователя (например, ввод недостающих для расчета данных), то рискуете ничего не дождаться. По-моему, есть только одно адекватное решение Вашей ситуации: отойти от Фокса и оформлять все Ваши программы в виде сервисов Windows. Тогда Вы сможете послать им сигнал завершения (соответствующий ключ в командной строке), а программа сможет корректно завершить свою работу... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 07:22 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
В свое время долгие мучения на тему юзера, который "забыл" выключиться привели к простому решению при условии не-архи-критичности ещенощной индексации: "забыл" выключиться - остался без ужина! 2-3 "резонансных" случая на контору - и никаких проблем уже десяток лет... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 07:27 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
е ж енощной... сорри... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 07:28 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
MaestroEvДавайте опишем стратегию, а не реализацию. К реализации перейдем после понимания того что, когда и где надо делать. Что ж, давайте попробуем. В принципе, ответ Вам уже дали:Dima TДумаю стандартного решения у этой проблемы нет, на это надо заранее закладываться. Например в каждой форме предусмотреть метод, вызвав который форма без вопросов закроется. И вызывать этот метод при автозакрытии. Теперь подробнее. Это вроде уже есть: MaestroEvВ программе есть таймер. Раз в десять минут проверяет время - если время больше установленного для выхода - пытается завершить программу. Во-первых, надо ставить (программно, вручную) некий индикатор "требуется завершение программы". У меня создается файлик в общей рабочей папке на сервере и основная форма по таймеру проверяет раз в 30 минут его наличие. Если появился - сообщение (содержимое этого txt-файлика, т.е. текст сообщения можно менять при создании) всем активным юзерам и блокировка запуска для новых юзеров. Одновременно включается признак "принудительного завершения" - глобальная переменная=.T. Есть еще переменная, соответствующая "уровню формы". Она не дает закрыться родительской форме, пока не закрыты все дочерние. Таймеров должно быть несколько - на каждую форму. Код Timer() примерно такой: Код: plsql 1. 2. 3. 4.
Если есть какие-то большие циклы, то соответствующий таймер надо притормаживать перед ними и опять запускать по их завершении. М-да, получилось как-то сумбурно и не подробно (всего сейчас просто не помню), но идея, я думаю, понятна. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 07:33 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
MaestroEvЧто ж мы сразу то или убить пользователя или убить процесс. Ладно, упростим задачу. Выключить надо не резко, а в принципе. Ночь большая. Выключить и все. Дождаться всех незавершенных циклов если есть и выключить так как это бы сделал юзер последовательно закрывая все окошки и нажав <выход>. Серверу утром нужен монопольный режим и у нас вся ночь на выход из программы. Давайте опишем стратегию, а не реализацию. К реализации перейдем после понимания того что, когда и где надо делать. Готового решения у меня нет, не было необходимости такую задачу решать. Ниже по какому бы пути я пошел решая эту задачу. Без убивания процесса тут никак, но это крайняя мера, поэтому я бы так сделал: первым запускается этот же EXE c параметрами Код: sql 1. 2.
Новый сразу получает хэндл по 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.
Тут возможно появление ошибок в Destroy() объектов которые существуют на этот момент. PS Ну и писать лог всех действий таймера и все вызовы код из таймера обернуть в TRY ... CATCH ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 10:00 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Dima TНапример если вышел MessageBox то ничего ты с ним программно не сделаешь. А так: Код: plsql 1.
Главное, чтобы messagebox был правильно настроен (нужная кнопка по умолчанию). Dima TЕще надо как-то определять что открыт REPORT на предпросмотр, тут ничего не подскажу, не разбирался ни разу с этим вопросом. Закрыть репорт можно попробовать с помощью KEYBOARD "CTRL+W" Тоже не проблема: Код: plsql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:32 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Jonny540Dima TНапример если вышел MessageBox то ничего ты с ним программно не сделаешь. А так: Код: plsql 1.
Главное, чтобы messagebox был правильно настроен (нужная кнопка по умолчанию). Тоже такая мысль появилась, правда после того как запостил. Что касается кнопки по умолчанию: MessageBox еще на кнопки "Д", "Н" и т.д. реагирует, буквы на кнопках подчеркнуты. Тут только возникает вопрос как из таймера определить что на экране MessageBox() висит? Ну и убедиться что сработает таймер в этот момент, а не будет ждать пока пользователь что-нибудь ответит. Тема неизученная, надо просто протестить все подозрительные варианты и придумать их обработку. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 12:49 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Dima TТут только возникает вопрос как из таймера определить что на экране MessageBox() висит?В этом все и дело. Пока не приходилось проверять, надо попробовать. А вообще-то неплохо бы в программе предусмотреть, когда выдавать мессбокс, а когда нет.Dima TНу и убедиться что сработает таймер в этот момент в этот момент, а не будет ждать пока пользователь что-нибудь ответитТут проще - если "маячок" горит, значит пользователь уже ушел от нас и ничего он уже никогда никому не ответит ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 13:09 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
MaestroEv, И еще: принудительное корректное закрытие приложения - штука довольно мозгоемкое (так и просится другое слово ), особенно если много всяких форм, отчетов и т.д. Если ты этого действительно хочешь - флаг в руки и барабан на шею. Чем можем - поможем. Чем унифицированней формы, кнопки, код... - тем лучше. Если неохота этим заниматься - то 14133592 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 13:26 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Jonny540Dima TТут только возникает вопрос как из таймера определить что на экране MessageBox() висит?В этом все и дело. Пока не приходилось проверять, надо попробовать. А вообще-то неплохо бы в программе предусмотреть, когда выдавать мессбокс, а когда нет.Dima TНу и убедиться что сработает таймер в этот момент в этот момент, а не будет ждать пока пользователь что-нибудь ответитТут проще - если "маячок" горит, значит пользователь уже ушел от нас и ничего он уже никогда никому не ответит Вопрос вообще-то по другому стоит MaestroEvСерверу утром нужен монопольный режим и у нас вся ночь на выход из программы. т.е. пользователь в конце рабочего дня встал, оделся и ушел, точнее свалил по-быстрому забыв закрыть прогу и выключить комп. Прога может и на MessageBox`е остаться открыта. В любом состоянии может остаться. Твой "маячок" вообще бесполезен если за компом никого нет и ничего в проге не делается. Ты же исходишь из того что пользователь своей активностью запустит проверку "маячка", а дальше отработает нужный тебе код. А тут нет пользователя. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 13:28 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Jonny540Если неохота этим заниматься - то 14133592 Не всегда возможно. Если ты сторонний разработчик, то может появиться доминирующее мнение "это не мы криворукие, это разработчик прогу корявую написал". Особенно если местный админ забывает прогу закрывать и комп выключать. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 13:33 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Dima TТвой "маячок" вообще бесполезен если за компом никого нет и ничего в проге не делается. Ты же исходишь из того что пользователь своей активностью запустит проверку "маячка", а дальше отработает нужный тебе код. А тут нет пользователя. А юзер и не нужен, если есть таймер. Messagebox великолепно удаляется и без юзера, только что проверил. А "маячок" зажигается админом приложения и от юзера уже мало зависит, сохранится и завершится и без него :) 14133599 Во всяком случае у меня эта схема работает довольно давно без каких либо сложностей. ЗЫ То, что коряво ее описал, это другой вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 13:47 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Наверное вот что забыл сказать: маячок зажигается с любой доступной машины в сети, вход с паролем админа приложения. И все, таймер затикал, все остальные могут собирать манатки... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 13:53 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Jonny540Messagebox великолепно удаляется и без юзера У Messagebox() есть параметр таймаут (как-бы нет смысла в висении его часами) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 15:05 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
XAndyУ Messagebox() есть параметр таймаут (как-бы нет смысла в висении его часами)Это не всегда удобно, если юзер все-таки еще не совсем ушел (скажем, покурить). ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 16:15 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
XAndyJonny540Messagebox великолепно удаляется и без юзера У Messagebox() есть параметр таймаут (как-бы нет смысла в висении его часами) Есть такое, я сначала даже начал пользоваться, только потом выяснилось что при указании таймаута возникает нездоровый побочный эффект - если кликнуть мимо окошка Messagebox() то он уходит на задний план (за окно фокса) и прога выглядит зависшей. Можно конечно задать поверх всех окон (+4096 во втором параметре), тогда оно вылазит в центре экрана даже если окно самой проги скрыто под другими, что тоже не очень хорошо. А без таймаута все нормально, окошко в центре окна фокса, за него не прячется и поверх других не лезет Не знаю почему такая багофича у разработчиков фокса получилась, но моим пользователям это сильно не понравилось. Пришлось отказаться от ее использования. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 16:25 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Jonny540Dima TТвой "маячок" вообще бесполезен если за компом никого нет и ничего в проге не делается. Ты же исходишь из того что пользователь своей активностью запустит проверку "маячка", а дальше отработает нужный тебе код. А тут нет пользователя. А юзер и не нужен, если есть таймер. Messagebox великолепно удаляется и без юзера, только что проверил. А "маячок" зажигается админом приложения и от юзера уже мало зависит, сохранится и завершится и без него :) 14133599 Во всяком случае у меня эта схема работает довольно давно без каких либо сложностей. ЗЫ То, что коряво ее описал, это другой вопрос. Тут ты опять от темы отходишь. Вопрос ведь стоит "как закрыть", а "не как определить момент закрытия". Мы с тобой о разных вещах говорим. Я о "как закрыть". Пусть MaestroEv сам решает какой из вопросов его интересует. PS Кстати про программное определение того что MessageBox() висит ты ничего не написал :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 16:43 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Dima TМы с тобой о разных вещах говорим. Я о "как закрыть" Я тоже. Dima TPS Кстати про программное определение того что MessageBox() висит ты ничего не написал :)Писал уже:Jonny540 Dima TТут только возникает вопрос как из таймера определить что на экране MessageBox() висит?В этом все и дело. Пока не приходилось проверять, надо попробовать. А вообще-то неплохо бы в программе предусмотреть, когда выдавать мессбокс, а когда нет.Пока не пробовал еще, м.б. завтра :) И, действительно, пусть ТС решает, а то он что-то молчит. :) Ладно, пусть пока переваривает советы. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 17:49 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Jonny540И, действительно, пусть ТС решает, а то он что-то молчит. Спит он уже. У него часовой пояс Москва+6 часов :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 20:36 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Dima Tпотом выяснилось что при указании таймаута возникает нездоровый побочный эффект - если кликнуть мимо окошка Messagebox() то он уходит на задний план (за окно фокса) и прога выглядит зависшей. Можно конечно задать поверх всех окон (+4096 во втором параметре), тогда оно вылазит в центре экрана даже если окно самой проги скрыто под другими Вот как, не знал (пользуюсь своим Messagebox'ом) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2013, 22:30 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Dima TXAndyпропущено... У Messagebox() есть параметр таймаут (как-бы нет смысла в висении его часами) Есть такое, я сначала даже начал пользоваться, только потом выяснилось что при указании таймаута возникает нездоровый побочный эффект - если кликнуть мимо окошка Messagebox() то он уходит на задний план (за окно фокса) и прога выглядит зависшей. Можно конечно задать поверх всех окон (+4096 во втором параметре), тогда оно вылазит в центре экрана даже если окно самой проги скрыто под другими, что тоже не очень хорошо. А без таймаута все нормально, окошко в центре окна фокса, за него не прячется и поверх других не лезет Не знаю почему такая багофича у разработчиков фокса получилась, но моим пользователям это сильно не понравилось. Пришлось отказаться от ее использования. Это не "багофича", а так задумано. Разумеется, если проверять в реальных кодах. Из хелпа: MESSAGEBOX() возвращает значение -1, когда происходит задержка времени. В этом и суть - в нужных случаях это значение можно обрабатывать программно и без ваших "пользователей". MESSAGEBOX() это не только фоксовская функция: #DEFINE MB_APPLMODAL 0x0 && пользователь может перемещаться в окнах других прикладных программ и работать в этих окнах. #DEFINE MB_SYSTEMMODAL 0x1000 && чтобы уведомлять пользователя о серьезных, потенциально опасных ошибках, которые требуют немедленного внимания #DEFINE MB_TASKMODAL 0x2000 && вызывающая прикладная программа или библиотека не имеют доступного дескриптора окна, но все еще должны сохранять вводимые данные для других окон в текущей прикладной программе ЗЫ. Вам впору уже свои идеи патентовать ... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2013, 11:40 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Dima TЧасть 1. Пробуем закрыть средствами проги берем _screen.activeform или если нет такой первую попавщуюся из коллекции _vfp.forms() Интересно, если подробнее ... как вы ловите свою "первую попавщуюся". ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2013, 11:42 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
sg12Это не "багофича", а так задумано. Разумеется, если проверять в реальных кодах. MSDN сам переводил или скопипастил у кого? Ты проверь сначала что это работает, прежде чем сюда писать. Покажи что я должен написать чтобы не иметь обе проблемы: 1. если кликнуть в окно фокса мимо окошка Messagebox() то оно уходит на задний план (за окно фокса) и прога выглядит зависшей 2. окно Messagebox() не должно вылазить в центре экрана поверх всех окон если окно фокса скрыто под другими т.е. поведение окна Messagebox() при вызове с указанием таймаута должно быть такое же как и при вызове его без указания таймаута. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2013, 12:32 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Dima TТы проверь сначала что это работает, прежде чем сюда писать. Покажи что я должен написать чтобы не иметь обе проблемы: 1. если кликнуть в окно фокса мимо окошка Messagebox() то оно уходит на задний план (за окно фокса) и прога выглядит зависшей 2. окно Messagebox() не должно вылазить в центре экрана поверх всех окон если окно фокса скрыто под другими т.е. поведение окна Messagebox() при вызове с указанием таймаута должно быть такое же как и при вызове его без указания таймаута. Мои сочувствия по поводу нехорошего поведения окон в Windows. Попробуйте написать свой MESSAGEBOX(), под себя. Разумеется, если сумеете - классы. Где-то на Фоксклубе был образец. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2013, 14:13 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Так хорошо тема шла... Пришел <censored> и в своей обычной манере начал <censored> . ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2013, 14:19 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
sg12Попробуйте написать свой MESSAGEBOX(), под себя. Достал. Я тебе уже говорил что не надо троллить в чужих топиках. PS Не говори мне что я должен делать и я не скажу куда тебе идти. . ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2013, 14:22 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
AndreTMТак хорошо тема шла... Пришел <censored> и в своей обычной манере начал <censored> . Извиняюсь, ТС что-то молчит. А тема действительно интересная. Особенно, если сравниваешь начало темы - 2006 г с нынешним 2013 г. Так быстро в Фоксе летит время, актуально - словно вчера писали. Так все-же - в каком цикле закрыть открытые репорты? ДимаТ. Вы же сами меня просили: - "Покажи что я должен написать чтобы не иметь обе проблемы ..." ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2013, 14:30 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Спасибо. 1. Попробую сделать класс в котором буду хранить список окон в порядке их открытия. 2. Все таки хочу закрывать формы "РУКАМИ" эмулируя нажатия на клавиши, чтобы не разбираться что там и как в самих окнах. 3. Репортов мало - надо убить сосем. 4. Мessagebox .. вроде в нем был параметр сколько ждать нажатия пользователя.... он сам вывалится. 5. РОботы работают не покладая рук, а в циклах есть DOEVENTS и возможно таймер иногда просится на выход внутри цикла - надо разобраться и с этим. Таймер не выключает все сам, а кидает файлик - просим всех на выход, а циклы его проверяют и если он есть - выходят. Ничего не забыл? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2013, 15:54 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Dima Tпро программное определение того что MessageBox() висит ты ничего не написал :)Обещал - проверил. Это такое же окно, как и остальные, только вот если заголовок пустой - фига :(( Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Правда, там могут, наверное, еще нюансы быть (активное, неактивное, etc). Код нашел на форуме. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2013, 17:07 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Ребята, эта проблема подробно рассмотрена в книге Клепинина и Агафоновой: глава 28, п.26 (стр 1015) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2013, 11:04 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
MaestroEv1. Попробую сделать класс в котором буду хранить список окон в порядке их открытия. Можно проще: создать у формы свойство ThisForm.tCreate и писать туда дату-время открытия. При выходе перебрать коллекцию _screen.Forms() и найти форму с минимальным tCreate ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2013, 09:22 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
MaestroEv, Советов море, но основной такой - для каждого конкретного приложения нужен свой уникальный алгоритм. Pulsar_p, К сожалению, мне пришлось делать это еще до выхода книги. Dima T, Если хочешь, почитай еще советы . Не удивлюсь, если еще на паре-тройке форумов сейчас это обсуждают :) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2013, 11:18 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Jonny540Dima T, Если хочешь, почитай еще советы . Не удивлюсь, если еще на паре-тройке форумов сейчас это обсуждают :) Лично мне эта проблема не актуальна. И думаю уже никогда ее решать не придется. Из того что написано на DBF имеет небольшие базы и несколько пользователей. Служебные операции типа индексирования выполняются при входе первого пользователя в сутках, а также при первом входе после любого вылета программы. Там где базы большие - MSSQL, с ним вообще нет необходимости монопольного запуска для чего-либо. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2013, 13:48 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Dima TJonny540Dima T, Если хочешь, почитай еще советы . Не удивлюсь, если еще на паре-тройке форумов сейчас это обсуждают :) Лично мне эта проблема не актуальна. И думаю уже никогда ее решать не придется. Из того что написано на DBF имеет небольшие базы и несколько пользователей. Служебные операции типа индексирования выполняются при входе первого пользователя в сутках, а также при первом входе после любого вылета программы. Там где базы большие - MSSQL, с ним вообще нет необходимости монопольного запуска для чего-либо. Т.е. практически это у вас сводится к нескольким SELECT-ам, а приложением считается основная форма с парочкой подчиненных. В реальной же практике закрытие всего открытого порой вызывает серьезные затруднения. Поэтому и господствует тезис, что лучше решать все конкретно и каждый раз надо открывать Америку. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2013, 16:22 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
sg12Т.е. практически это у вас сводится к нескольким SELECT-ам, а приложением считается основная форма с парочкой подчиненных. Ты когда уже книгу про меня напишешь? а то все переспрашиваешь по мелочи. ты давай - инфу по форуму собери, напиши книгу, черновик покажешь - я подкорректирую ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2013, 19:21 |
|
Принудительное завершение программы
|
|||
---|---|---|---|
#18+
Dima Tsg12Т.е. практически это у вас сводится к нескольким SELECT-ам, а приложением считается основная форма с парочкой подчиненных. Ты когда уже книгу про меня напишешь? а то все переспрашиваешь по мелочи. ты давай - инфу по форуму собери, напиши книгу, черновик покажешь - я подкорректирую Интересная идея, но инфа без обсуждения, что "свадьба без невесты". Да и модератор начеку, свое дело знает - в Пустотреп выгонит. А так было бы интересно наглядно на примере проследить пути глупостей в Фокспро - как при процедурном программировании можно годами толочь воду в ступе. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2013, 21:10 |
|
|
start [/forum/topic.php?all=1&fid=41&tid=1583088]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
76ms |
get tp. blocked users: |
1ms |
others: | 313ms |
total: | 468ms |
0 / 0 |