Главная страница
    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.051 c
15-1199971931
Dmitry S
2008-01-10 16:32
2008.02.17
Расскрыть SWF


2-1201046616
fluxion
2008-01-23 03:03
2008.02.17
Срок действия программы


2-1201095078
ply
2008-01-23 16:31
2008.02.17
работа с закладками


15-1199946021
Некто
2008-01-10 09:20
2008.02.17
Узнаёте?


2-1201267828
asdfa
2008-01-25 16:30
2008.02.17
Как пропустить выполнение цикла верхнего уровня?





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