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

Вниз

Не освобождается мьютех, почему?   Найти похожие ветки 

 
NX   (2007-11-17 15:00) [0]

Программа создает мъютех, но освободить его не может
RaiseLastWin32Error возвращает:

System Error.  Code: 288.
Попытка освободить не принадлежащий процессу объект синхронизации.

Но мьютех создается то в этом роцессе и освобождается в там же, в чем причина?


 
Kolan ©   (2007-11-17 15:04) [1]

> Но мьютех создается то в этом роцессе и освобождается в
> там же, в чем причина?

Есть подозрение, что в коде программы&#133


 
Leonid Troyanovsky ©   (2007-11-17 15:06) [2]


> NX   (17.11.07 15:00)  

> Но мьютех создается то в этом роцессе и освобождается в
> там же, в чем причина?

Как создается и освобождается.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2007-11-17 15:08) [3]


> Kolan ©   (17.11.07 15:04) [1]

> Есть подозрение, что в коде программы…

Возможно, что и в версии дельфи/ОС.

--
Regards, LVT.


 
NX   (2007-11-17 16:10) [4]

Вот пример кинул:

var
 Form1: TForm1;

 HSvcMtx: THandle;

Const
  SvcMutex = "Service mutex";
  APPMutex = "Application mutex";

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 HSvcMtx:=CreateMutex(nil,false,SvcMutex);
 Win32Check(HSvcMtx <> 0);
 if GetLastError <> ERROR_ALREADY_EXISTS then
   ShowMessage("Create = "+SvcMutex)
 else ShowMessage("No Create = "+SvcMutex);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 Win32Check(ReleaseMutex(HSvcMtx));
 RaiseLastWin32Error;
end;


 
Leonid Troyanovsky ©   (2007-11-17 16:18) [5]


> NX   (17.11.07 16:10) [4]

>  HSvcMtx:=CreateMutex(nil,false,SvcMutex);

>  Win32Check(ReleaseMutex(HSvcMtx));

Ну, дык он создается незахваченным (false),
что ж тогда освобождать.

--
Regards, LVT.


 
MBo ©   (2007-11-17 16:21) [6]

Не видно захвата мьютекса, т.к. создается он свободным
HSvcMtx:=CreateMutex(nil,false,SvcMutex);


 
NX   (2007-11-17 16:25) [7]


> Ну, дык он создается незахваченным (false), что ж тогда
> освобождать.


В примере неправильно было, сорри, даже в положении истина он не освобождается. как делал: два приложения таких запустил в первом создал, освободил второе все равно не захватывает.


 
Leonid Troyanovsky ©   (2007-11-17 16:38) [8]

> NX   (17.11.07 16:25) [7]

> В примере неправильно было, сорри, даже в положении истина
> он не освобождается. как делал: два приложения таких запустил
> в первом создал, освободил второе все равно не захватывает.

Если это, дейс-но, сервис и приложения, то, вероятно,
у приложения не хватает прав.
Попробуй создать с security descriptor не nil,
а открытым для всех.

--
Regards, LVT.


 
NX   (2007-11-17 17:04) [9]


> Leonid Troyanovsky ©   (17.11.07 16:38) [8]


Это простое приложение пока, но в сервисе это будет стоять в дальнейшем.
Что - то в обыкновенном примере (просто проект форма 2 батона) и не работает. Есть еще условие, что я работаю с правами "опытного пользователя", но запускал под администратором всеравно таже хрень происходить , версия: BDS 2006 трех дисковая (кракнутая). система WinXP SP2 Pro Corp. Ed. rus.


 
Leonid Troyanovsky ©   (2007-11-17 17:07) [10]


> NX   (17.11.07 17:04) [9]

> Что - то в обыкновенном примере (просто проект форма 2 батона)
> и не работает

Код - в студию.

--
Regards, LVT.


 
NX   (2007-11-17 17:12) [11]


> Leonid Troyanovsky ©   (17.11.07 17:07) [10]


Он уже в студии: NX   (17.11.07 16:10) [4]
исправте только CreateMutex(nil,false,SvcMutex); на true

у меня этот код и есть не рабочий даже со значением true


 
Leonid Troyanovsky ©   (2007-11-17 17:25) [12]


> NX   (17.11.07 17:12) [11]

> исправте только CreateMutex(nil,false,SvcMutex); на true

RaiseLastWin32Error - лишний, а так
вполне себе работает.

--
Regards, LVT.


 
NX   (2007-11-17 18:59) [13]


> Leonid Troyanovsky ©   (17.11.07 17:25) [12]


> RaiseLastWin32Error


дык он там стоял, что бы понять суть роисходящего.

Вот это саме и не работает, хм......


 
NX   (2007-11-17 19:11) [14]

ReleaseMutex(HSvcMtx)
его освобождает, но неудаляет, тогда все равильно, только я не правильно захватываю его.
как захватить уже созданный мютекс?


 
Leonid Troyanovsky ©   (2007-11-17 19:18) [15]


> NX   (17.11.07 19:11) [14]

> я не правильно захватываю его.
> как захватить уже созданный мютекс?

WaitForSingleObject, например.

--
Regards, LVT.


 
NX   (2007-11-17 19:31) [16]

а как уничтожить? через CloseHandle()


 
Leonid Troyanovsky ©   (2007-11-17 19:42) [17]


> NX   (17.11.07 19:31) [16]

> а как уничтожить? через CloseHandle()

Уничтожает его ОС (как, собс-но, и создает),
при закрытии последнего удерживаемого хендла.
Либо при кончине потока, удерживавшего мьютекс.

--
Regards, LVT.


 
NX   (2007-11-17 20:31) [18]


> Leonid Troyanovsky ©   (17.11.07 19:42) [17]


убивается через CloseHandle() однако.


 
Leonid Troyanovsky ©   (2007-11-17 20:39) [19]


> Leonid Troyanovsky ©   (17.11.07 19:42) [17]

> Либо при кончине потока, удерживавшего мьютекс.

Это относится к освобождению, sorry.

--
Regards, LVT.


 
NX   (2007-11-17 21:40) [20]

Странная штука, когда в одном приложении использывается CloseHandle(),
то можно мютекс заново создать, но как только его поимеет другое приложение, то CloseHandle() уже не прокатывает, только через закрытие программы.


 
Leonid Troyanovsky ©   (2007-11-17 21:59) [21]


> NX   (17.11.07 21:40) [20]

Путанник.
Почитал бы уж что-нибудь, хотя бы msdn.

--
Regards, LVT.


 
NX   (2007-11-17 22:49) [22]


> Почитал бы уж что-нибудь, хотя бы msdn.


слушаюсь и повинуюсь...  :-)



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

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

Наверх




Память: 0.49 MB
Время: 0.049 c
3-1204262172
Kehnzo
2008-02-29 08:16
2008.08.24
Вопросы по DBGrid


1-1197265455
Vladimir888
2007-12-10 08:44
2008.08.24
Получить значки дисководов


2-1216590932
timekiller
2008-07-21 01:55
2008.08.24
Как выделить строку в TMemo?


15-1215425702
shlst
2008-07-07 14:15
2008.08.24
asm + отладка и что бы delphi-like


2-1216298595
TNT
2008-07-17 16:43
2008.08.24
Масштабирование формы





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