Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];

Вниз

Как узнать, не запущена ли программа?   Найти похожие ветки 

 
Morrison ©   (2005-03-02 23:30) [0]

Ламерский вопрос, который наверняка задавался неоднократно... Надо чтобы при попытке повторно запустить уже работающую программу, эта программа бы не запускалась... В общем, как отследить, работает ли программа в данный момент?


 
Anatoly Podgoretsky ©   (2005-03-02 23:33) [1]

Общими средствами никак, да и зачем ну запустилась, обнаружижила что она не единственная, так и прекратить безобразие, тих уйти.
Для обнаружения желательно использовать мьютексы.


 
P.N.P. ©   (2005-03-02 23:34) [2]

>наверняка задавался неоднократно
А почему, исходя из этого предположения, в FAQ не заглянуть?


 
Новичек ©   (2005-03-02 23:35) [3]

http://delphibase.spb.ru/


 
Simply Alex   (2005-03-02 23:51) [4]

Добавь в файл проекта:


var
 HM: THandle;

function IsRunning: Boolean;
begin
 HM:=OpenMutex(MUTEX_ALL_ACCESS, false, "SomeName");
 Result:=(HM <> 0);
 if (HM=0) then HM:=CreateMutex(nil, false, "SomeName")
end;


Если твоя программа запущена, то IsRunning=TRUE...


 
Morrison ©   (2005-03-03 00:09) [5]

Большое спасибо!
А где можно подробно почитать обо всем этом (всякие там THandle), желательно на русском?


 
BillyJeans   (2005-03-03 13:28) [6]

2 Simply Alex   (02.03.05 23:51) [4]

а если программа была запущена и некорректно завершена её работа, mutex то останется


 
Anatoly Podgoretsky ©   (2005-03-03 14:09) [7]

BillyJeans   (03.03.05 13:28) [6]
The system closes the handle automatically when the process terminates.


 
Digitman ©   (2005-03-03 14:28) [8]


> BillyJeans   (03.03.05 13:28) [6]


пурга.


 
Думкин ©   (2005-03-03 14:33) [9]

>  [8] Digitman ©   (03.03.05 14:28)

Дафай опять свой код с пайпами. :)


 
Digitman ©   (2005-03-03 14:36) [10]


> Думкин ©   (03.03.05 14:33) [9]


щас)

я что, издательство "Сделай сам" для самоделкиных ?)


 
Вариант ©   (2005-03-03 16:02) [11]

>Simply Alex
Я тоже советую использовать Mutex базирование. Но эффективнее его использовать так:
Добавляем в проект unit:

unit Only_One;

interface

function Init_Mutex(mid: string): boolean;

implementation

uses Windows;

var
 mut: thandle;

function mut_id(s: string): string;
var
 f: integer;
begin
 result := s;
 for f := 1 to length(s) do
   if result[f] = "\" then
     result[f] := "_";
end;

function Init_Mutex(mid: string): boolean;
begin
 Mut := CreateMutex(nil, false, pchar(mut_id(mid)));
 Result := not ((Mut = 0) or (GetLastError = ERROR_ALREADY_EXISTS));
end;

initialization
 mut := 0;
finalization
 if mut <> 0 then
   CloseHandle(mut);
end.


А использвать так:

program VariantProgram;

uses
 only_one,
 Unit1 in "Unit1.pas" {Form1},
 Unit2 in "Unit2.pas" {dm: TDataModule},
 Unit3 in "Unit3.pas" {Form3},

{$R *.RES}

const
 UniqueString = "VariantMutex";
   {Может быть любое слово. Желательно латинскими буквами.}

 begin
   if not init_mutex(UniqueString) then
     exit; {Выходим до инициализации, если мьютекс уже есть}
   Application.Initialize;
   Application.CreateForm(TForm1, Form1);
   Application.CreateForm(Tdm, dm);
   Application.CreateForm(TForm3, Form3);
   Application.Run;
 end.


Эффективно на 100%. Я сам использую этот метод.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.037 c
6-1105396413
klyonov
2005-01-11 01:33
2005.03.20
Интернет-радио


6-1105978255
vers
2005-01-17 19:10
2005.03.20
Файрвол


3-1108656969
juice
2005-02-17 19:16
2005.03.20
привилегии на выполнение ХП для роли


3-1108740146
Bogdan
2005-02-18 18:22
2005.03.20
Одинаковые записи


6-1105890457
VOVKA_LOG
2005-01-16 18:47
2005.03.20
Трафик





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский