powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Один экземпляр приложения.
21 сообщений из 46, страница 2 из 2
Один экземпляр приложения.
    #38485570
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав С...кийС моей точки зрения, этот ответ не совсем правильный. Отследить закрытие по ошибке/через менеджер задач можно, так как при закрытии приложения система должна закрыть все его окна и завершить главный вызывающий процесс. Этот момент можно перехватить в приложении и успеть записать переменную в соответствующий файл. На С/С++ это (отследить тип запроса системы на закрытие приложения) сделать вполне возможно... На VFP - не знаю. Может и можно... как-нибудь... по ON Shutdown, например...

Попробуй, поймай:

Код: sql
1.
2.
Declare integer ExitProcess in win32api integer  
  ? ExitProcess(1)
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486500
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав С...кийОтвет от ВладимираМ прозвучал: "Никак"

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

Например: запусти прогу по сети (из расшаренной папки), затем свой комп выдерни из розетки (или выдерни сетевой провод). Как другой пользователь сети узнает что ты некорректно завершил работу?

Не менее гуманный способ выполнить извне TerminateProcess() или снять задачу из диспетчера (это тоже самое).

Поэтому тут единственный гарантированный способ: использовать средства ОС за которыми она следит:
1. Самое универсальное: держать открытым файл, при закрытии процесса виндовс его сам закроет, даже при выключении компа.
2. если в пределах одного компа, то использовать объекты ядра виндовса, на что была ссылка во втором посте.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486731
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блондиночка - админу:
- Стасик, как с помощью FoxPro узнать состояние розетки соседнего компьютера, ужас как приспичило?
Хит сезона.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486833
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, как надоела демагогия некоторого товарища, который нам не товарищ... Нельзя даже поговорить по существу...
Все это действительно так, либо простой механизм, либо сложный через апи.... Если принятие решения нельзя доверить компьютеру, решение должен принять сам человек... Вот такой вариант.. Записывать в файл кто монопольно открыл этот файл и время, при следущем входе, если файл не удалился при аварийном выходе, посмотреть разницу по времени, если составляет больше например 10 часов :-), можно смело удалить, иначе выдать сообщение такой-то товарищ монополизировал этот файл, он на работе ?(Да-Нет), ну и дальнейший анализ, это муж. или женщ.(если Ж и блнд можно смело удалять) и т.д. :-)
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486854
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1иначе выдать сообщение такой-то товарищ монополизировал этот файл, он на работе ?(Да-Нет), ну и дальнейший анализкороче, опять "зовите программиста"
единственное улучшение - теперь не программист, а пользователь может решать, что делать
впрочем, улучшение ли это, ещё вопрос :)
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486860
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1Все это действительно так, либо простой механизм, либо сложный через апи.... Если принятие решения нельзя доверить компьютеру, решение должен принять сам человек...
Через апи несложно, просто непривычно если работаешь только с фоксом.
Через файлы элементарно. Как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
local lcFileFlag, llWork, lnHWork
lcFileFlag = JustPath(sys(16, 0)) + 'IsWork.flg'
llWork = file(lcFileFlag)
lnHWork = fcreate(lcFileFlag)
if lnWork < 0
     ? 'программа уже запущена'
else
   if llWork
     ? 'предыдущий запуск завешен некорректно'
   endif
   ... тут полезный код

   && перед выходом
   fclose(lnHWork)
   delete file (lcFileFlag)
endif


Можно создать для этих целей DBF и при входе блокировать (RLOCK()) свою запись. Так универсальнее, каждый пользователь блокирует свою запись, а если потребовался монопольный доступ, то блокируем всю таблицу (FLOCK()).

PS По-хорошему не надо писать проги которые ограничивают пользователя одной запущенной копией. Например работает он в одной, тут требует срочно сделать что-то другое: запустил вторую копию, сделал, закрыл и продолжает работать в первой.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486871
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, надо ещё проверить не считает ли сервер этот файл открытым и заодно проверить владельца этого файла-флага, можно продолжать бесконечную цепочку проверок... а где оптимальное "цена качество"... :-)
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486898
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1Да, надо ещё проверить не считает ли сервер этот файл открытым
Не надо. Этим виндовс занимается самостоятельно.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486925
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1Блин, как надоела демагогия некоторого товарища, который нам не товарищ... Нельзя даже поговорить по существу...


Вот именно - "поговорить", верно сказано. Поболтать о программировании - не значит программировать.
Только не надо при этом никого вводить в заблуждение, на форум заходят не только чтобы потрепаться.
Сколько лет вы в Фоксе, если судить по уровню ваших знаний и соответственно ваших вопросов?

Наверное, мало кто будет спорить, что каждая уважающая себя программа (разумеется, у уважающего себя программиста)
должна иметь класс, в котором, по крайней мере, должны быть две штатные процедуры входа/выхода,
Могу я на него взглянуть?
Есть он у сидящих годами в коммандном окне не выходя, не умеющих собрать простой учебный проект, но любящих скармливать другим свои советы?
И куда вы воткнете вот такие умные свои рассуждения о программировании, а попросту демагогию, как вы выразились.

Поэтому порой и жаль некоторых новичков, которые наивно уверены, что на подобных советах десятилетней давности
они учатся программировать и напрасно тратящих на это свое время.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486938
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы не хотел тут мериться.., но меня просто улыбнуло... Вам необходимо самоутведиться..:-) пжлста Dbase III+ инертность мышления, модульность, в классах небходимость пока не возникала...:-) В данный момент пишу отчет по БЭСТ :-)
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486948
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1Я бы не хотел тут мериться.., но меня просто улыбнуло... Вам необходимо самоутведиться..:-) пжлста Dbase III+ инертность мышления, модульность, в классах небходимость пока не возникала...:-) В данный момент пишу отчет по БЭСТ :-)

Мериться не надо, размер у вас не тот.
А БЭСТ настолько дремучая древность, что лучше бы вам этим не гордиться.
Вас просто жаль, нашли на что пол-жизни потратить.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486999
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это у кого какой менталитет, я например с уважением смотрю на программистов ведущих бухгалтерию на PL/1 :-), А кларион вам знаком, на которм написана задача сдачи отчетности в ПФР, которая актуальна и поныне.. А вопрос в этой ветке форума уже риторический "Покажите, что вы сделали..." :-)

PS: Я сожалею, что ввязался в дискуссию...
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38487011
9IKOB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, в решении проблемы запуска на одном компьютере нескольких экземпляров приложения в ФоксКлубе существует большой минус - если предложенный код проверки запуска приложения добавить в разные приложения, то он не позволяет запустить одновременно эти разные приложения с одним кодом проверки запуска. В этом я убедился на практике.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38487035
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1Это у кого какой менталитет, я например с уважением смотрю на программистов ведущих бухгалтерию на PL/1 :-), А кларион вам знаком, на которм написана задача сдачи отчетности в ПФР, которая актуальна и поныне.. А вопрос в этой ветке форума уже риторический "Покажите, что вы сделали..." :-)

PS: Я сожалею, что ввязался в дискуссию...

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

А смысл дискуссии простой - я ДимеТ и ВладимируМ дал ссылку на статью в хелпе в ответ на их запросы.
Не сомневаюсь, что они туда заглядывали.
Но сложилось впечатление, что они ничего там не поняли ...
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38487138
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12я ДимеТ и ВладимируМ дал ссылку на статью в хелпеПервое упоминание о ссылке - тут 15215332 . Но выше никаких ссылок нет. Есть только цитата (причём даже не оформленная как цитата, ну это мелочи).
sg12Могу я на него взглянуть?А мы можем на ваш код взглянуть? :)
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38487152
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМкоторый искренне заблуждается. Показал в чем ошибочность выбранного способа решения
... встает вопрос администрирования доступа
Решение с открытым файлом-флажком в общем случае НЕ ошибочно, т.к. легко допиливается до любого необходимого уровня функциональности и прекрасно работает. И сессии одной программы позволяются и различаются, и разные программы не конфликтуют, и не требуется никакого администрирования под любыми ОС. Чтоб не быть голословным:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
* код при старте приложения
if version(2)=0   &&  runtime
   local cTemp, aFiles[1,1], i, lDblRun, lCrash, iDscr

   cTemp = addbs(getenv("Temp"))
   lDblRun = .f.    && признак повторного запуска
   lCrash = .f.     && признак аварийного завершения
   for i=1 to adir(aFiles, cTemp+this.AppLabel+"*.run")
      iDscr = fopen(cTemp+aFiles[i,1],2)
      if iDscr>0
         lCrash = True
         fclose(iDscr)
         erase (cTemp+aFiles[i,1])
      else
         lDblRun = True
      endif
   endfor

   if lCrash
      messagebox("Один из предыдущих сеансов работы программы завершен аварийно!"+CR+;
         "При повторении подобных ситуаций обратитесь в отдел ИТ"), PICT_WARN, MSG_WARN)
   endif
   if lDblRun
      messagebox("Программа уже запущена на Вашем компьютере!", PICT_WARN, MSG_WARN)
   endif

   this.RunFile = cTemp+this.AppLabel+sys(2015)+".run"
   this.RunFileDscr = fcreate(this.RunFile)
   if this.RunFileDscr<=0
      messagebox("Невозможно создать регистрационный файл!", PICT_ERR, MSG_ERR)
      return .f.
   endif
endif



Код: sql
1.
2.
3.
4.
5.
6.
7.
* код при закрытии приложения
if this.RunFileDscr>0
   fclose(this.RunFileDscr)
endif
if !empty(this.RunFile)
   erase (this.RunFile)
endif
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38487185
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XAndy, да, можно, кто же спорит. Тут просто дело в том, что файл-то можно "держать" монопольно, и за этим следит даже не программа, а сама ОС. И при нештатном завершении программы сама же ОС, а вовсе не программа, "освобождает" этот файл. И вот как раз это и можно использовать.
А нам тут рассказывают про save to/restore from, которые только при работающей программе работают, извините за тавтологию. Т.е. "2 проверки" не сработают по той простой причине, что save/restore дают нам способ сделать только одну проверку - "а что же там в файле хранится", т.е. "а не покрашились ли мы в прошлый раз". Вторую проверку - "а можно ли туда чего нового записать в данный момент"/"а созданы ли эти данные другой копией нашей программы" - этим инструментом, увы, не провести.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38487980
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
9IKOBКстати, в решении проблемы запуска на одном компьютере нескольких экземпляров приложения в ФоксКлубе существует большой минус - если предложенный код проверки запуска приложения добавить в разные приложения, то он не позволяет запустить одновременно эти разные приложения с одним кодом проверки запуска. В этом я убедился на практике.
Так немного допили его под свои нужды. Там именованный мьютекс, задай свое имя и будут твои проги работать независимо друг от друга. Как-то так например:
Код: sql
1.
lcApplicationName = JustStem(sys(16, 0))
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38487984
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12А смысл дискуссии простой - я ДимеТ и ВладимируМ дал ссылку на статью в хелпе в ответ на их запросы.
Ссылку ты не дал, но вот она , сам сходи по ней.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38488084
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12Dima Tпропущено...

Правильно, ни один уважающий себя тролль не будет подтверждать свой словесный понос примерами кода

Посклочничать вам опять охота, засиделись ...
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38488365
9IKOB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТак немного допили его под свои нужды. Там именованный мьютекс, задай свое имя и будут твои проги работать независимо друг от друга. Как-то так например:
Код: sql
1.
lcApplicationName = JustStem(sys(16, 0))


Благодарю!
...
Рейтинг: 0 / 0
21 сообщений из 46, страница 2 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Один экземпляр приложения.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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