Главная страница
    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.055 c
2-1201309790
Artem
2008-01-26 04:09
2008.02.17
Скрыть папку


3-1191298911
Memed_1971
2007-10-02 08:21
2008.02.17
calculate string SQL server 20005


2-1201181350
IC+
2008-01-24 16:29
2008.02.17
Получить путь к объекту из ярлыка (lnk)


2-1201114814
Тоник
2008-01-23 22:00
2008.02.17
WM_MOUSEENTER и ​WM_MOUSELEAVE без компонента


2-1201366122
ChaosAD
2008-01-26 19:48
2008.02.17
Query + Lookup





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