Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запустил раз — включилось, запустил второй — выключилось


Тыщ ©   (2009-02-28 23:12:00) 

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

Сделал event'ами, насколько хорош такой способ?

uses Windows;

var
  Ev: THandle;
begin
  Ev := CreateEvent(nil, true, false, 'unique123');
  if GetLastError() = ERROR_ALREADY_EXISTS then
  begin
    SetEvent(Ev);
    Exit;
  end;
  MessageBox(0, 'Started.', '', 0);
  repeat
    //DoSomeTask();
    if WaitForSingleObject(Ev, 50) = 0 then break;
  until false;
  MessageBox(0, 'Stopped.', '', 0);
  CloseHandle(Ev);
end.


Тыщ   (2009-03-02 15:55:00) [1]

> Григорьев Антон ©   (02.03.09 11:21) [13]

Спасибо! Учту.


Григорьев Антон   (2009-03-02 11:21:00) [2]

Если у вас открыты сессии одновременно нескольких пользователей, то повторный запуск программы не приведёт к выгрузке первой копии, если запуск выполняется из разных сессий. Возможно, именно так вы всё и задумывали. Но если вам нужно, чтобы запуск программы из-под другой сессии прекращал работу программы в первой сессии, имя события должно начинаться с "Global\".


Anatoly Podgoretsky   (2009-03-02 11:06:00) [3]

Ну не только дает, но и делает, а MessageBox наверно для отладки.


KSergey   (2009-03-02 10:46:00) [4]

> Anatoly Podgoretsky ©   (02.03.09 09:59) [10]
> Да ладно, все нормально, не каждому дано понять.

однако да, любезно дает возможность узнать о желании завершить :)


Anatoly Podgoretsky   (2009-03-02 09:59:00) [5]

Да ладно, все нормально, не каждому дано понять.


Медвежонок Пятачок   (2009-03-02 09:05:00) [6]

и где здесь "она только завершала свой предыдущий процесс"?

"Это ему снится"


KSergey   (2009-03-02 08:30:00) [7]

> Тыщ ©   (02.03.09 01:37) [6]
> Скомпилируй, посмотри, удивись.

и где здесь "она только завершала свой предыдущий процесс"?


Германн   (2009-03-02 02:42:00) [8]


> Тыщ ©   (01.03.09 22:41) [3]
>
> Жду нормальных ответов.
>

Жду нормальных вопросов.


Тыщ   (2009-03-02 01:37:00) [9]

> А именно не завершает предыдущий процесс, а ничего не делает пока тот сам не завершится.

Скомпилируй, посмотри, удивись.


Медвежонок Пятачок   (2009-03-02 00:07:00) [10]

Нужно сделать так, чтоб при повторном запуске она только завершала свой предыдущий процесс.

Сделал event'ами, насколько хорош такой способ?


Он хорош всем кроме того, что не делает то, что надо.
А именно не завершает предыдущий процесс, а ничего не делает пока тот сам не завершится.


Медвежонок Пятачок   (2009-03-02 00:01:00) [11]

программирование ради программирования


Тыщ   (2009-03-01 22:41:00) [12]

Жду нормальных ответов.


Медвежонок Пятачок   (2009-03-01 00:44:00) [13]

батник, в котором 2 строки

taskkill
myproga.exe


Германн   (2009-03-01 00:27:00) [14]


> Тыщ ©   (28.02.09 23:12)
>
> Есть программа, не создающая никаких окон и работающая в
> фоновом режиме.
> Нужно сделать так, чтоб при повторном запуске она только
> завершала свой предыдущий процесс.
>

А что есть "фоновый режим"?
А чем данная задача отличается от стандартной задачи "контроля запуска второй копии приложения"?


Наверх

Титульная страница Поиск, карта сайта Написать письмо