|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
Всем привет. Я хотел узнать. Как в Фокс Про допустить только один экземпляр запущенного приложения и как это можно реализовать проще всего? Всем спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 14:27 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
Бобков ИльяВсем привет. Я хотел узнать. Как в Фокс Про допустить только один экземпляр запущенного приложения и как это можно реализовать проще всего? Всем спасибо. Как предотвратить повторный запуск приложения ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 14:29 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
PaulWist, спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 14:35 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
Нашел более простое решение просто сохранял переменную в мем файл и проверял её на запуске. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 15:22 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
Бобков ИльяНашел более простое решение просто сохранял переменную в мем файл и проверял её на запуске. Теперь попробуй убить свою прогу (снять задачу в диспетчере) Или просто CANCEL сделай где-нибудь внутри кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 15:32 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
Dima T, У меня на этот случай есть вторая проверка (программа завершена не корректно). И всё работает. Просто сбрасываю переменную с копией экземпляра приложения и всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 16:12 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
Бобков Илья, IF AppAlreadyRunning() =MESSAGEBOX("Приложение уже запущено..", 0 + 16 +0, ; "Внимание.") QUIT ENDIF *------------------------------------------- FUNCTION AppAlreadyRunning LOCAL hsem, lpszSemName #DEFINE ERROR_ALREADY_EXISTS 183 DECLARE INTEGER GetLastError IN win32API DECLARE INTEGER CreateSemaphore IN WIN32API ; STRING @ lpSemaphoreAttributes, ; LONG lInitialCount, ; LONG lMaximumCount, ; STRING @ lpName lpszSemName = 'PUBLIC_FOOD' hsem = CreateSemaphore(0,0,1,lpszSemName) RETURN (hsem # 0 AND GetLastError() == ERROR_ALREADY_EXISTS) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2013, 17:09 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
Бобков ИльяDima T, У меня на этот случай есть вторая проверка (программа завершена не корректно). И всё работает. Просто сбрасываю переменную с копией экземпляра приложения и всё. Можно уточнить каким образом выполняется эта проверка? Переменная физически где находится? В том же mem-файле? Как Вы по значению переменных отличаете завершенную не корректно программу от программы, которая сейчас продолжает работать? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2013, 21:26 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
[quot ВладимирММожно уточнить каким образом выполняется эта проверка? Переменная физически где находится? В том же mem-файле? Как Вы по значению переменных отличаете завершенную не корректно программу от программы, которая сейчас продолжает работать?[/quot] вот тебе не все равно насколько квадратны колеса у велосипеда? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2013, 21:45 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
Dima T Из хелпа: SAVE TO Команда - Сохраняет текущие переменные памяти и массивы в файле переменных памяти или в memo-поле. RESTORE FROM Команда - Извлекает переменные памяти и массивы переменных памяти, сохраненные в файле переменных памяти или в memo-поле, и помещает их в память. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2013, 09:33 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
sg12Dima T Из хелпа: SAVE TO Команда - Сохраняет текущие переменные памяти и массивы в файле переменных памяти или в memo-поле. RESTORE FROM Команда - Извлекает переменные памяти и массивы переменных памяти, сохраненные в файле переменных памяти или в memo-поле, и помещает их в память. И каким образом это помогает решить поставленную задачу? Как Вы планируете отличить содержимое mem-файла, созданного работающей в данный момент программой, от содержимого mem-файла, оставшегося без изменений вследствие аварийного завершения работы (сбой)? Во втором случае нет работающего приложения, но mem-файл выглядит так, как-будто приложение продолжает работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2013, 22:38 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
ВладимирМsg12Dima T Из хелпа: SAVE TO Команда - Сохраняет текущие переменные памяти и массивы в файле переменных памяти или в memo-поле. RESTORE FROM Команда - Извлекает переменные памяти и массивы переменных памяти, сохраненные в файле переменных памяти или в memo-поле, и помещает их в память. И каким образом это помогает решить поставленную задачу? Как Вы планируете отличить содержимое mem-файла, созданного работающей в данный момент программой, от содержимого mem-файла, оставшегося без изменений вследствие аварийного завершения работы (сбой)? Во втором случае нет работающего приложения, но mem-файл выглядит так, как-будто приложение продолжает работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2013, 09:46 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
ВладимирМКак Вы планируете отличить содержимое mem-файла, созданного работающей в данный момент программой, от содержимого mem-файла, оставшегося без изменений вследствие аварийного завершения работы (сбой)? Во втором случае нет работающего приложения, но mem-файл выглядит так, как-будто приложение продолжает работать. Понимаю вас, решение не ахти. Можно так: По окончании первая переменная записывается в mem-файл и проверяется через RESTORE. При удачном завершении значение второй переменной меняется и также сохраняется. При отказе ее значение в mem-файле не меняется. В принципе, можно обойтись и одной переменной на три значения, но это на любителя. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2013, 09:48 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
sg12Можно так: По окончании первая переменная записывается в mem-файл и проверяется через RESTORE. При удачном завершении значение второй переменной меняется и также сохраняется. При отказе ее значение в mem-файле не меняется. В принципе, можно обойтись и одной переменной на три значения, но это на любителя. Пример кода покажи. Ты пытаешься доказать что мягкое и теплое это одно и тоже. Так показывай как мягкость термометром меряют. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2013, 18:59 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
Dima T Примеры кода есть в ссылке, которую я чуть выше вам дал. Или - "... не читатель, а писатель", судя по вашему посту? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2013, 21:09 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
sg12Можно так: По окончании первая переменная записывается в mem-файл и проверяется через RESTORE. При удачном завершении значение второй переменной меняется и также сохраняется. При отказе ее значение в mem-файле не меняется. В принципе, можно обойтись и одной переменной на три значения, но это на любителя. Давным давно, во времена Win 3.11 один из вариантов решения задачи запрета одновременного запуска нескольких копий одного и того же приложения было создание файла при запуске и удаление при выходе. Т.е. последовательность действий была такая 1. При старте приложения ищем файл с определенным именем, находящийся в определенной директории 1.1. Если такого файла нет, то это означает, что других копий приложения запущено не было. Значит, можно запускать приложение. 1.2. Если такой файл найден, то это означает, что данное приложение уже было запущено. Пользователь пытается запустить его второй раз. Значит, запускать нельзя 2. Если приложение было запущено, то при старте указанный файл создается в указанной директории 3. При завершении работы приложения файл удалялся Т.е. даже не важно, что там внутри файла находится. Достаточно самого факта существования файла. На первый взгляд, кажется, что схема идеальная. Но это только на первый взгляд. Представим себе ситуацию, когда приложение было завершено, но файл не удалился. Что получим? При попытке запустить приложение, мы видим, что файл есть. Значит, приложение запускать нельзя. Как следствие, после такого события приложение невозможно будет запустить, пока программист вручную не удалит файл с диска. Чем, собственно, программисты, реализовавшие такую схему контроля, периодически и занимались... Нештатное завершение приложения (удалили процесс) - зови программиста. Без вариантов... Так вот, добавление некоего содержимого в это файл проблему не решит. Никак. Ведь любые изменения содержимого предполагается вносить в этот файл при штатном (корректном) завершении приложения. Если же приложение было завершено не корректно, то содержимое файла останется неизменным. Таким, какое оно есть в процессе работы приложения. Но ведь приложение уже не работает! Как следствие, снова требуется ручное вмешательство программиста, чтобы запустить приложение. Вы снова вернулись к началу истории программирования. Снова наступаете на те же грабли... sg12Примеры кода есть в ссылке, которую я чуть выше вам дал. Где? Что-то я тоже не вижу никаких Ваших ссылок в этой теме... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2013, 21:50 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
ВладимирМ История дело интересное. Но в теме речь идет о переменной, а не файле-семафоре - это разные решения, не надо путать. Даже новичок ТС заметил, что нужно делать две проверки, а не одну. Что и я пытался вам объяснить. В своем примере выполните вторую проверку и он заработает. Примеры для ДимыТ из хелпа - надо в нем набрать "SAVE TO". ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 10:05 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
ВладимирМ, Файл нужно держать открытым во время работы программы - тогда проблем не будет. Не лень было так подробно расписывать очевидные недостатки криворукого решения, когда файл не держится программой окрытым? Механизм открытия файла в монопольном режиме прост и универсален, потому что даёт возможность гибких решений, например у меня это используется для следующих целей: - можно запретить одновременную работу второго экземпляра приложения (блокируемый файл по выбору в любом месте); - можно запретить одновременную работу с экземпляром данных (блокируемый файл в папке с данными); - можно организовать самообновление программы через интернет (основная программа и инсталлятор запускают друг друга, ожидая завершения - освобождения файла). ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 14:27 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
sg12ВладимирМ История дело интересное. Но в теме речь идет о переменной, а не файле-семафоре - это разные решения, не надо путать. Даже новичок ТС заметил, что нужно делать две проверки, а не одну. Что и я пытался вам объяснить. В своем примере выполните вторую проверку и он заработает. Примеры для ДимыТ из хелпа - надо в нем набрать "SAVE TO". Так ПОКАЖИТЕ свой пример? ГДЕ Вы его привели? И еще раз, любой анализ переменных основан на том факте, что вы ШТАТНО завершили приложение. Т.е. непосредственно перед выходом как-то там изменили переменные. А если выход был НЕ штатным. Т.е. выйти-то вышли, а вот переменные не изменились. Ваш пример, который Вы неизвестно где привели, эту проблему решает? Переменные внутри файла - это всего-лишь "бантики". Принципиально НИЧЕМ не отличаются от факта создания-удаления файла. Разве что, это более сложное решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 19:45 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
aswsВладимирМ, Файл нужно держать открытым во время работы программы - тогда проблем не будет. Не лень было так подробно расписывать очевидные недостатки криворукого решения, когда файл не держится программой окрытым? Я исходил из предположения, что объясняю человеку, который искренне заблуждается. Показал в чем ошибочность выбранного способа решения aswsМеханизм открытия файла в монопольном режиме прост и универсален, потому что даёт возможность гибких решений, Чем этот вариант отличается от банальной блокировки записи в DBF-таблице? Вот ЭТО действительно просто и понятно для программиста FoxPro. Более того, чрезвычайно гибко и удобно. А с файлами, встает вопрос администрирования доступа. А вопросы администрирования доступа к файлам и директориям в настоящее время уже достаточно сложен. Судя по уровню вопросов спрашивающих, решить эту проблему они не смогут. Скорее всего, у большинства пользователей просто не будет прав на создание и блокировку файлов в ряде директорий. Придется "мудрить" не с расположением, а с именами файлов. Т.е. ни о какой "простоте" и "понятности" не может быть и речи... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 20:05 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
ВладимирМ Вы опять что-то перепутали - я не обещал вам каких-либо примеров. И вообще, какой смысл их сочинять для удовлетворения чьего-то гонора, если его можно сбить. Вы также продолжаете путать переменные и файлы - это непростительно даже новичку. Первоначально записанные значения переменных меняются при штатном выходе, при нештатном нет, я уже объяснял. Если mem-файл вас раздражает, вы можете сохранить их значения в таблице, ini-файле, в текстовом виде и т.п. И еще - рабочие файлы программы обычно принято располагать в рабочей директории, куда есть доступ, иначе вы просто не запустите свою программу. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2013, 00:40 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
sg12Вы опять что-то перепутали - я не обещал вам каких-либо примеров. Правильно, ни один уважающий себя тролль не будет подтверждать свой словесный понос примерами кода ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2013, 18:33 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
ВладимирМaswsМеханизм открытия файла в монопольном режиме прост и универсален, потому что даёт возможность гибких решений, Чем этот вариант отличается от банальной блокировки записи в DBF-таблице? Вот ЭТО действительно просто и понятно для программиста FoxPro. Более того, чрезвычайно гибко и удобно. А с файлами, встает вопрос администрирования доступа. А вопросы администрирования доступа к файлам и директориям в настоящее время уже достаточно сложен. Судя по уровню вопросов спрашивающих, решить эту проблему они не смогут. Скорее всего, у большинства пользователей просто не будет прав на создание и блокировку файлов в ряде директорий. Придется "мудрить" не с расположением, а с именами файлов. Т.е. ни о какой "простоте" и "понятности" не может быть и речи...Да, конечно, согласен, это у меня от привычки юзать в FoxPro клиент-серверную архитектуру с "толстыми" клиентами )), то-есть никаких шаред-файлов и всегда есть полные права как минимум на папку... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2013, 20:19 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
Dima Tsg12Вы опять что-то перепутали - я не обещал вам каких-либо примеров. Правильно, ни один уважающий себя тролль не будет подтверждать свой словесный понос примерами кода Посклочничать вам опять охота, засиделись без ассистентов. Решили половить на дурачка. Там было пояснение - какой смысл их сочинять для удовлетворения чьего-то гонора. И не надо блефовать, у вас самих нет серьезных кодов. Все, что вы имеете - это из года в год обрывки одних и теж же процедур и советов, для новичков, на пальцах: "Примерно так ...". Вы из них хоть один работающий проект сумеете собрать? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2013, 20:44 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
sg12...Но в теме речь идет о переменной, а не файле-семафоре - это разные решения, не надо путать. из рекламы...На левую палочку шоколад льется вертикально, а на правую - сверху вниз. Абсолютно разные технологии... Вопрос-то состоял именно в том, КАК по значению переменной в сохраненном файле(вариант № 1) или просто по наличию файла(вариант № 2) отследить, что программа реально работает, а не "вылетела" по ошибке... Ответ от ВладимираМ прозвучал: "Никак" С моей точки зрения, этот ответ не совсем правильный. Отследить закрытие по ошибке/через менеджер задач можно, так как при закрытии приложения система должна закрыть все его окна и завершить главный вызывающий процесс. Этот момент можно перехватить в приложении и успеть записать переменную в соответствующий файл. На С/С++ это (отследить тип запроса системы на закрытие приложения) сделать вполне возможно... На VFP - не знаю. Может и можно... как-нибудь... по ON Shutdown, например... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2013, 09:59 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
Станислав С...кийС моей точки зрения, этот ответ не совсем правильный. Отследить закрытие по ошибке/через менеджер задач можно, так как при закрытии приложения система должна закрыть все его окна и завершить главный вызывающий процесс. Этот момент можно перехватить в приложении и успеть записать переменную в соответствующий файл. На С/С++ это (отследить тип запроса системы на закрытие приложения) сделать вполне возможно... На VFP - не знаю. Может и можно... как-нибудь... по ON Shutdown, например... Попробуй, поймай: Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2013, 10:15 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
Станислав С...кийОтвет от ВладимираМ прозвучал: "Никак" Если в целом - ответ верный. Изнутри приложения в большинстве случаев можно понять что его некорректно закрыли, но не во всех случаях, т.к. иногда приложению не дается возможности что-либо сделать. Например: запусти прогу по сети (из расшаренной папки), затем свой комп выдерни из розетки (или выдерни сетевой провод). Как другой пользователь сети узнает что ты некорректно завершил работу? Не менее гуманный способ выполнить извне TerminateProcess() или снять задачу из диспетчера (это тоже самое). Поэтому тут единственный гарантированный способ: использовать средства ОС за которыми она следит: 1. Самое универсальное: держать открытым файл, при закрытии процесса виндовс его сам закроет, даже при выключении компа. 2. если в пределах одного компа, то использовать объекты ядра виндовса, на что была ссылка во втором посте. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2013, 19:22 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
Блондиночка - админу: - Стасик, как с помощью FoxPro узнать состояние розетки соседнего компьютера, ужас как приспичило? Хит сезона. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2013, 23:15 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
Блин, как надоела демагогия некоторого товарища, который нам не товарищ... Нельзя даже поговорить по существу... Все это действительно так, либо простой механизм, либо сложный через апи.... Если принятие решения нельзя доверить компьютеру, решение должен принять сам человек... Вот такой вариант.. Записывать в файл кто монопольно открыл этот файл и время, при следущем входе, если файл не удалился при аварийном выходе, посмотреть разницу по времени, если составляет больше например 10 часов :-), можно смело удалить, иначе выдать сообщение такой-то товарищ монополизировал этот файл, он на работе ?(Да-Нет), ну и дальнейший анализ, это муж. или женщ.(если Ж и блнд можно смело удалять) и т.д. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2013, 04:42 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
q1w1e1иначе выдать сообщение такой-то товарищ монополизировал этот файл, он на работе ?(Да-Нет), ну и дальнейший анализкороче, опять "зовите программиста" единственное улучшение - теперь не программист, а пользователь может решать, что делать впрочем, улучшение ли это, ещё вопрос :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2013, 06:40 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
q1w1e1Все это действительно так, либо простой механизм, либо сложный через апи.... Если принятие решения нельзя доверить компьютеру, решение должен принять сам человек... Через апи несложно, просто непривычно если работаешь только с фоксом. Через файлы элементарно. Как-то так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Можно создать для этих целей DBF и при входе блокировать (RLOCK()) свою запись. Так универсальнее, каждый пользователь блокирует свою запись, а если потребовался монопольный доступ, то блокируем всю таблицу (FLOCK()). PS По-хорошему не надо писать проги которые ограничивают пользователя одной запущенной копией. Например работает он в одной, тут требует срочно сделать что-то другое: запустил вторую копию, сделал, закрыл и продолжает работать в первой. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2013, 06:54 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
Да, надо ещё проверить не считает ли сервер этот файл открытым и заодно проверить владельца этого файла-флага, можно продолжать бесконечную цепочку проверок... а где оптимальное "цена качество"... :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2013, 07:54 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
q1w1e1Да, надо ещё проверить не считает ли сервер этот файл открытым Не надо. Этим виндовс занимается самостоятельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2013, 08:50 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
q1w1e1Блин, как надоела демагогия некоторого товарища, который нам не товарищ... Нельзя даже поговорить по существу... Вот именно - "поговорить", верно сказано. Поболтать о программировании - не значит программировать. Только не надо при этом никого вводить в заблуждение, на форум заходят не только чтобы потрепаться. Сколько лет вы в Фоксе, если судить по уровню ваших знаний и соответственно ваших вопросов? Наверное, мало кто будет спорить, что каждая уважающая себя программа (разумеется, у уважающего себя программиста) должна иметь класс, в котором, по крайней мере, должны быть две штатные процедуры входа/выхода, Могу я на него взглянуть? Есть он у сидящих годами в коммандном окне не выходя, не умеющих собрать простой учебный проект, но любящих скармливать другим свои советы? И куда вы воткнете вот такие умные свои рассуждения о программировании, а попросту демагогию, как вы выразились. Поэтому порой и жаль некоторых новичков, которые наивно уверены, что на подобных советах десятилетней давности они учатся программировать и напрасно тратящих на это свое время. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2013, 09:30 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
Я бы не хотел тут мериться.., но меня просто улыбнуло... Вам необходимо самоутведиться..:-) пжлста Dbase III+ инертность мышления, модульность, в классах небходимость пока не возникала...:-) В данный момент пишу отчет по БЭСТ :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2013, 09:47 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
q1w1e1Я бы не хотел тут мериться.., но меня просто улыбнуло... Вам необходимо самоутведиться..:-) пжлста Dbase III+ инертность мышления, модульность, в классах небходимость пока не возникала...:-) В данный момент пишу отчет по БЭСТ :-) Мериться не надо, размер у вас не тот. А БЭСТ настолько дремучая древность, что лучше бы вам этим не гордиться. Вас просто жаль, нашли на что пол-жизни потратить. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2013, 09:57 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
Это у кого какой менталитет, я например с уважением смотрю на программистов ведущих бухгалтерию на PL/1 :-), А кларион вам знаком, на которм написана задача сдачи отчетности в ПФР, которая актуальна и поныне.. А вопрос в этой ветке форума уже риторический "Покажите, что вы сделали..." :-) PS: Я сожалею, что ввязался в дискуссию... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2013, 10:39 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
Кстати, в решении проблемы запуска на одном компьютере нескольких экземпляров приложения в ФоксКлубе существует большой минус - если предложенный код проверки запуска приложения добавить в разные приложения, то он не позволяет запустить одновременно эти разные приложения с одним кодом проверки запуска. В этом я убедился на практике. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2013, 10:45 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
q1w1e1Это у кого какой менталитет, я например с уважением смотрю на программистов ведущих бухгалтерию на PL/1 :-), А кларион вам знаком, на которм написана задача сдачи отчетности в ПФР, которая актуальна и поныне.. А вопрос в этой ветке форума уже риторический "Покажите, что вы сделали..." :-) PS: Я сожалею, что ввязался в дискуссию... Мне знакома бухгалтерша, которая и сейчас тайком под столом на счетах расчеты перепроверяет. И что из этого, компьютер выкидывать? А смысл дискуссии простой - я ДимеТ и ВладимируМ дал ссылку на статью в хелпе в ответ на их запросы. Не сомневаюсь, что они туда заглядывали. Но сложилось впечатление, что они ничего там не поняли ... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2013, 11:01 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
sg12я ДимеТ и ВладимируМ дал ссылку на статью в хелпеПервое упоминание о ссылке - тут 15215332 . Но выше никаких ссылок нет. Есть только цитата (причём даже не оформленная как цитата, ну это мелочи). sg12Могу я на него взглянуть?А мы можем на ваш код взглянуть? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2013, 11:58 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
ВладимирМкоторый искренне заблуждается. Показал в чем ошибочность выбранного способа решения ... встает вопрос администрирования доступа Решение с открытым файлом-флажком в общем случае НЕ ошибочно, т.к. легко допиливается до любого необходимого уровня функциональности и прекрасно работает. И сессии одной программы позволяются и различаются, и разные программы не конфликтуют, и не требуется никакого администрирования под любыми ОС. Чтоб не быть голословным: Код: 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.
Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2013, 12:04 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
XAndy, да, можно, кто же спорит. Тут просто дело в том, что файл-то можно "держать" монопольно, и за этим следит даже не программа, а сама ОС. И при нештатном завершении программы сама же ОС, а вовсе не программа, "освобождает" этот файл. И вот как раз это и можно использовать. А нам тут рассказывают про save to/restore from, которые только при работающей программе работают, извините за тавтологию. Т.е. "2 проверки" не сработают по той простой причине, что save/restore дают нам способ сделать только одну проверку - "а что же там в файле хранится", т.е. "а не покрашились ли мы в прошлый раз". Вторую проверку - "а можно ли туда чего нового записать в данный момент"/"а созданы ли эти данные другой копией нашей программы" - этим инструментом, увы, не провести. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2013, 12:24 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
9IKOBКстати, в решении проблемы запуска на одном компьютере нескольких экземпляров приложения в ФоксКлубе существует большой минус - если предложенный код проверки запуска приложения добавить в разные приложения, то он не позволяет запустить одновременно эти разные приложения с одним кодом проверки запуска. В этом я убедился на практике. Так немного допили его под свои нужды. Там именованный мьютекс, задай свое имя и будут твои проги работать независимо друг от друга. Как-то так например: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2013, 19:44 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
sg12А смысл дискуссии простой - я ДимеТ и ВладимируМ дал ссылку на статью в хелпе в ответ на их запросы. Ссылку ты не дал, но вот она , сам сходи по ней. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2013, 19:46 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
sg12Dima Tпропущено... Правильно, ни один уважающий себя тролль не будет подтверждать свой словесный понос примерами кода Посклочничать вам опять охота, засиделись ... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2013, 22:05 |
|
Один экземпляр приложения.
|
|||
---|---|---|---|
#18+
Dima TТак немного допили его под свои нужды. Там именованный мьютекс, задай свое имя и будут твои проги работать независимо друг от друга. Как-то так например: Код: sql 1.
Благодарю! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2013, 09:38 |
|
|
start [/forum/topic.php?all=1&fid=41&tid=1582811]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
146ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
82ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 286ms |
0 / 0 |