Люди добрые помогите.
Как сделать, чтобы программа запускалась только один раз, т.е. повторно запустить нельзя.
Регистрация: 13.12.2006
Сообщений: 3,859
Вы имеете ввиду одновременно две копии программы ?
http://pblog.ru/?p=8
в этой статье я это описывал
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов | Мои статьи
Форумчанин
Регистрация: 16.04.2007
Сообщений: 298
Или чтобы она отработала один раз и после этого не могла запуститься?
Не надо ничего усложнять. Все достаточно тривиально.
Пользователь
Регистрация: 11.05.2007
Сообщений: 20
Вы имеете ввиду одновременно две копии программы ?
http://pblog.ru/?p=8
в этой статье я это описывал
Именно это я имел ввиду. Большое спасибо.
Пользователь
Регистрация: 04.07.2007
Сообщений: 76
Или чтобы она отработала один раз и после этого не могла запуститься?
А вот это как сделать?
И ещё чтобы отработала несколько минут и закрылась.
http://wmhelpers.narod.ru/ — сайт программ, помогающими получить немного денег.
Форумчанин
Регистрация: 07.04.2007
Сообщений: 501
А вот это как сделать?
Игры и программы запускаются только от имени администратора
И ещё чтобы отработала несколько минут и закрылась.
А если поставить таймер.
Исходники программ — http:\www.kort.3dn.ru
With best regards
Участник клуба
Регистрация: 20.04.2007
Сообщений: 1,448
В реестр переменную. При FormClose меняем ее значение с «1» на «0» (например), а при FormCreate Проверяем чтобы была = 1, иначе «Sorry..»
Не сработает при Убивании процесса.
Life is too short, play more.
Как правильно задавать вопросы
Форумчанин
Регистрация: 22.05.2007
Сообщений: 511
Project- WiewSourse и там пропиши следующий код.
program Project1; uses Forms, Windows, // не забудьте эту строчку Unit1 in ‘Unit1.pas’ ; var HM: THandle; function Check: boolean; begin HM := OpenMutex(MUTEX_ALL_ACCESS, false, ‘MyOwnMutex’); Result := (HM <> 0); if HM = 0 then HM := CreateMutex(nil, false, ‘MyOwnMutex’); end; begin if Check then Exit; //Это без изменения Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end.
Источник: www.programmersforum.ru
Почему поток запускается только 1 раз?
Почему? И как это исправить? Нужно что бы при каждом нажатии цикл запускался заново.
- Вопрос задан более трёх лет назад
- 2336 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 1
Python-разработчик
Ну во-первых, цикл у вас запускается не в отдельном потоке, а в том же потоке, что и окно. Это замечательно видно по тому, что окно фризится, пока цикл работает (не двигается, не ресайзится). То, что вы унаследовались от Thread еще не означает, что все, что вы запустите, будет работать в отдельном потоке. Пока у вас все в один поток идет. Оттуда, к слову, и ошибка — метод start() может быть вызван только один раз на один поток.
Что делать если все ярлыки открываются одной программой
Простейший способ решить вашу задачу таков:
Источник: qna.habr.com
Как запустить функцию один раз
Часто бывает необходимо выполнить определенную функцию только один раз в программе. Это простая и распространенная ситуация, с которой часто приходится сталкиваться при разработке программного обеспечения. Примером может служить приветственное сообщение, отображаемое на веб-сайте при первой регистрации пользователя. Или это может быть кнопка покупки на кассе, которая должна списывать деньги только один раз (даже при многократном нажатии). Другим примером может быть метрика аналитики, которая должна сообщаться один раз на протяжении всего пути пользователя.
Есть много способов добиться такого поведения в коде, в зависимости от ситуации. Давайте рассмотрим некоторые из них и посмотрим, какой из них выделяется с точки зрения удобства использования и тестирования.
Решение 1. Используйте глобальное состояние:
Это может быть наиболее очевидным и простым способом убедиться, что функция выполняется только один раз. глобальную переменную можно использовать для отслеживания функции, чтобы указать, была ли она уже выполнена или нет. флаг может быть инициализирован как false внутри функции, он будет переключаться, чтобы предотвратить последующие выполнения. Ниже приведена демонстрация такого решения:
let isUserWelcomed = false const welcomeUserOnce = (user) => < if (!isUserWelcomed) < isUserWelcomed = true console.log(«welcome to home», user) >>
Это правильное решение, наша функция приветствия будет запущена только один раз, но есть возможности для улучшения:
- Проблема с этим решением заключается в том, что мы используем глобальную переменную isUserWelcomed для отслеживания состояния. Эта переменная может быть доступна другим частям кода и, следовательно, может быть изменена случайно.
- Поведение этой функции зависит от определенного значения глобальной переменной. Этот флаг должен быть инициализирован как false , иначе поведение будет другим.
- Тестировать это будет сложно, так как это зависит от внешнего значения.
Решение 2. Используйте локальное состояние:
Ранее мы видели, что первое решение плохо из-за использования глобального состояния. Мы можем улучшить его, сделав переменную состояния isUserWelcomed приватной переменной. Кроме того, мы можем использовать замыкание, чтобы скрыть переменную состояния, чтобы она была недоступна снаружи функции.
const welcomeUserOnce = ((isUserWelcomed) => < return (user) => < if (!isUserWelcomed) < isUserWelcomed = true console.log(«welcome to home», user) >> >)(false)
Здесь мы используем функцию немедленно вызвать для передачи начального состояния, которое всегда будет ложным, и мы возвращаем новую функцию, которая может получить доступ к состоянию через замыкание. Как и предыдущее решение, это также будет работать, но еще есть возможности для улучшения.
Я считаю, что это можно улучшить, сделав расширяемой логику «выполнить один раз». На данный момент, если какой-либо другой фрагмент кода необходимо запустить один раз, мы должны повторить эту логику. Но, будучи хорошим программистом, мы не должны повторяться или, другими словами, наш код должен быть СУХИМ (советуем не повторяться).
Решение 3. Функциональный подход:
До сих пор мы видели несколько решений для решения одной проблемы. Теперь мы будем использовать более общий и функциональный способ сделать то же самое. Но сначала давайте определим наше идеальное решение, чтобы мы могли соответствующим образом установить наши ожидания:
- Наше решение должно быть многоразовым и может использоваться для запуска любой функции только один раз.
- Наша функция не должна каким-либо образом модифицировать исходную функцию.
- Мы должны иметь возможность восстановить исходную функцию, чтобы ее можно было повторно запускать более одного раза, если это необходимо.
Хорошо, теперь у нас есть требования, и мы можем придумать решение, которое сможет удовлетворить их все. Понятно, что наша функция должна быть функцией более высокого порядка, поскольку нам нужно вернуть новую копию — мы не можем изменить исходную функцию. Нашим решением будет:
const once = fn => < let done = false return (…args) => < if (!done) < done = true fn(…args) >> >
Давайте внимательно посмотрим, почему и как это работает:
- Сигнатура функции once говорит о том, что она принимает функцию в качестве параметра и возвращает новую функцию.
- Существует локальная переменная done для отслеживания выполнения переданной функции или нет.
- Наконец, возвращается новая функция с нулем или более параметрами. Для этого мы использовали синтаксис spread operator.
Теперь мы знаем, как работает эта функция once , давайте посмотрим, почему она лучше.
- Функцию once можно повторно использовать, чтобы превратить любую функцию любого типа в функцию «выполнить один раз». Нам не нужно ничего менять внутри функций. В следующем примере показано использование нашей функции once :
const greet = (name) => < console.log(‘Hello ‘ + name) >const greetOnce = once(greet) greetOnce(‘Alice’) // Output: Hello Alice greetOnce(‘Bob’) // Output:
- Мы не полагаемся на глобальное или внешнее состояние. Все необходимое содержится в функции once . Это сделает тестирование проще и легче.
- На самом деле все вышеперечисленные преимущества и качества можно свести к одному слову: Чистота. Функция once лучше, потому что она чиста.
Чистая функция всегда возвращает один и тот же результат, если заданы одни и те же параметры. И чистая функция не имеет побочных эффектов (без изменения локальных статических переменных, нелокальных переменных, изменяемых ссылочных аргументов или потоков ввода/вывода).
Вывод:
В этом посте мы рассмотрели разные способы достижения функциональности однократного запуска функции. Мы сравнили разные подходы, нам удалось разработать наиболее эффективное и надежное решение. Это не только делает логику многоразовой, но и чистой. Я надеюсь, что этот пример дал вам хороший пример чистых функций и их плюсов.
Я надеюсь, что вы нашли этот пост полезным и интересным. Делитесь, хлопайте и комментируйте. Очень жду ваших отзывов и мыслей.
Источник: questu.ru