Главная страница
    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.5 MB
Время: 0.051 c
15-1215265054
NaRuTo
2008-07-05 17:37
2008.08.24
IRC


15-1215183486
Хохол
2008-07-04 18:58
2008.08.24
Пятничный флуд: Большой адронный коллайдер


2-1216301860
Mops
2008-07-17 17:37
2008.08.24
свой пункт меню


8-1184352294
leonidus
2007-07-13 22:44
2008.08.24
Траблы при получении уровня компресии у JPG-файлов


15-1215533480
Украинец
2008-07-08 20:11
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский