08.03.2016 15:06
Цитата:
OlegON либо я тебя неправильно понял, либо ты первое сообщение не читал... В чем твоя схема отличается от моей и как она защищена от ребута и прочих убийств программы между 1 и 3? Напоминаю, что суть кроссплатформенная, поэтому WM_* поймать не удастся.
возможно я не понял. Из твоего описания в п.1 выглядит так как-будто программа запускается, создает файл и что дальше происходит неясно - висит ли она в простое, или завершается? Но используя магические способности, предположим (), что вероятно программа периодически запускается по таймеру и работает некое время, и может быть не успевает завершиться до следующего запуска.

в принципе да, всё похоже, просто из условий не совсем непонятно что ты хочешь от схемы

если расширить всю схему на несколько запусков:
первый запуск:
1) запускается программа:
а) проверяется наличие флага, если нет - создается флаг, если есть - значит предыдущий запуск был не закончен и возможно нужно сделать что-то еще по устранению последствий, либо работает другой экземпляр программы - проблема в том чтобы различить эти моменты?
б) делается дело,
в) удаляется флаг и завершается программа,

второй запуск:
2) см.п.1

Так?
08.03.2016 17:57
Проблема, да, была как раз в том, чтобы не дать запуститься второй копии и только тогда, когда работает предыдущая.
Файловый флаг под Windows страдает своим наличием при ребуте, т.е. программы нет, а флаг есть.
Я сейчас обошел через установку флага в базе, поскольку программа работает с ней, при дисконнекте или ребуте, флаг пропадает.
Но в целом видно, что Win в очередной раз в пролете, поскольку в Linux есть очищающаяся при перезагрузке директория для этих вот целей.
08.03.2016 18:45
в java можно попробовать через JMX, а конкретнее, через MBeanServer, там можно динамически создать параметр и проверять-менять его в другом экземпляре программы. Соответственно при ребуте его не должно быть видно.
08.03.2016 18:56
Спасибо за идею, однако было интересно в свете именно винды и ее возможностей, которые, как мы видим, отсутствуют в очередной раз...
09.03.2016 10:26
FILE_ATTRIBUTE_TEMPORARY и FILE_FLAG_DELETE_ON_CLOSE



Не?
09.03.2016 10:28
Вот, к сожалению, это все либо подразумевает корректное закрытие приложения, либо не видно из другого приложения...
09.03.2016 10:47
Цитата:
OlegON Но в целом видно, что Win в очередной раз в пролете, поскольку в Linux есть очищающаяся при перезагрузке директория для этих вот целей.
Не понимаю, что мешает организовать такую же в винде...
09.03.2016 10:57
А почему мы зациклились на одном флаге? Кто мешает создать, например, два, по началу и концу процесса? Для эстетов можно юзать потоки в одном файле.
09.03.2016 11:13
Цитата:
grannie А почему мы зациклились на одном флаге? Кто мешает создать, например, два, по началу и концу процесса? Для эстетов можно юзать потоки в одном файле.
Как я понимаю проблема в зависании. Т.е. когда программа висит, она по флагам будет выглядеть как запущенная.

При принудительной перезагрузке компа, флаги останутся. Вот тут их и нужно безусловно удалять при запуске системы. Этого можно добиться например положив bat файл в автозагрузку, который и будет заниматься удалением файлов

Код:
%appdata%\microsoft\windows\start menu\programs\startup\


ЗЫ: Зависания кроссплатформенной Жабы - это нормально, то что винда каталоги не чистит автоматом - это прям проблема проблем....
09.03.2016 14:42
Цитата:
Micle Как я понимаю проблема в зависании. Т.е. когда программа висит, она по флагам будет выглядеть как запущенная.

При принудительной перезагрузке компа, флаги останутся.
Если мы "флагируем" И начало, И конец процесса - мы всегда сможем разобраться после внезапной уборщицы, вытаскивающей кабель из сервера, запущен ли уже процесс штатно или "висит".
Так кто/что нам это мешает делать?
Часовой пояс GMT +3, время: 17:27.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.