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

Вниз

Освобождение ресурса, занятого через CreateFileMapping   Найти похожие ветки 

 
DelphiN! ©   (2007-07-03 16:37) [0]

Создаю через CreateFileMapping в памяти идентификатор того, что программа уже запущена, однако иногда(редко) бывает что после завершения процесса, идентификатор в памяти остается и система его не освобождает, в следствии чего я не могу запустить свою программу повторно!

Проверку на наличие приложения в памяти сделал следующим образом :


var
 AppFM: Integer;

procedure TDATA.DataModuleCreate(Sender: TObject);
begin
   AppFM:= CreateFileMapping($ffffffff,nil, PAGE_READONLY,0,32,"OMGSHELL");
   if (GetLastError = ERROR_ALREADY_EXISTS)and(HaveProces("OSG_Shell.exe")) then
     halt;           //Proga uje zapushena
...
end;


В чем может быть проблема и как с этим бороться?


 
DelphiN! ©   (2007-07-03 16:40) [1]

Извиняюсь код проверки выглядит так :



var
AppFM: Integer;

procedure TDATA.DataModuleCreate(Sender: TObject);
begin
  AppFM:= CreateFileMapping($ffffffff,nil, PAGE_READONLY,0,32,"OMGSHELL");
  if (GetLastError = ERROR_ALREADY_EXISTS) then
    halt;           //Proga uje zapushena
...
end;



 
clickmaker ©   (2007-07-03 16:54) [2]

а почему не через CreateMutex?


 
Игорь Шевченко ©   (2007-07-03 16:58) [3]


> однако иногда(редко) бывает что после завершения процесса,
>  идентификатор в памяти остается и система его не освобождает


Значит, остается второй процесс в памяти.


 
Инс ©   (2007-07-03 17:07) [4]


> а почему не через CreateMutex?

FileMapping действительно может быть удобнее, в частности, туда можно записать хэндл окна, который при запуске второй копии, нужно развернуть и поместить на передний план.

DelphiN!
Странно. Даже при некорректном завершении процесса, система гарантированно освобождает ресурсы, при этом счетчик ссылок на FileMapping уменьшается. Если он становится равным нулю - система уничтожит объект. Так что, действительно, видимо кто-то еще его использует.


 
Eraser ©   (2007-07-06 12:34) [5]


> DelphiN! ©   (03.07.07 16:37) 

где-то читал (у Рихтера возможно), что при использовании мьютексов может сложиться такая ситуация, что мьютекс останется, так сказать, бесхозным..


 
Инс ©   (2007-07-06 18:56) [6]


> что мьютекс останется, так сказать, бесхозным..


Во-первых, тут проблема, как я понял, не с мьютексом, а с FileMapping. Во-вторых, безхозный мьютекс означает другое. Когда поток, владеющий мьютексом, завершается, не освободив его, мьютекс переходит в состояние "ничей" и поток, ждущий на этом мьютексе, просыпается. Но подсчет ссылок и закрытие хэндла тут ни причем.



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

Форум: "WinAPI";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.043 c
15-1200286337
Slider007
2008-01-14 07:52
2008.02.17
С днем рождения ! 14 января 2008 понедельник


15-1200497580
ProgRAMmer Dimonych
2008-01-16 18:33
2008.02.17
Я чего-то недопёр


2-1201188185
Knob
2008-01-24 18:23
2008.02.17
Положение курсора в StringGrid


2-1201184638
lead-in
2008-01-24 17:23
2008.02.17
TFileStream


2-1201193988
AntonUSAnoV
2008-01-24 19:59
2008.02.17
как записать в событие onkeydown сочетание клавиш





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский