Страница: 1 |
Страница: 1 |
Вопрос: Как узнать существование мютекса?
Добавлено: 02.06.06 17:21
Автор вопроса: Leha
вот дали такой код на сях
for (int i=1;i<=2;i++)
{
HANDLE hMutex = CreateMutex(NULL ,FALSE,"MegaMutex");
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
MessageBox(0,"АГА","Есть такой!",1);
}
else
{
MessageBox(0,"Паканет!","...",1)
}
}
переделал в такой код на вб
for i=1 to 2
mLong = CreateMutex(SA, False, "MegaMutex")
If GetLastError = ERROR_ALREADY_EXISTS Then
MsgBox "АГА есть"
Else
msgbox "Нет"
End If
next i
запускаю си два меседжбокса - "нет", потом "есть"
перезагружаю машину запускаю вб - два месагбокса "нет"
в чем дело?
похоже что GetLastError неработает
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #1
Добавлено: 02.06.06 17:30
GetLastError работает. Всегда.
А что, SA = NULL ?
Номер ответа: 2
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #2
Добавлено: 02.06.06 17:34
:/ А шо цэ такэ? "мютексы"...
Номер ответа: 3
Автор ответа:
Leha
Вопросов: 37
Ответов: 68
Профиль | | #3
Добавлено: 02.06.06 17:36
Dim SA As SECURITY_ATTRIBUTES
вот что такое SA
Номер ответа: 4
Автор ответа:
Leha
Вопросов: 37
Ответов: 68
Профиль | | #4
Добавлено: 02.06.06 17:38
если GetLastError работает то тогда получается что в системесоздается куча мьютексов с адинаковым названием (как такое может быть?)
Номер ответа: 5
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #5
Добавлено: 02.06.06 17:51
nLength структуры SECURITY_ATTRIBUTES задаешь?
SA.nLength = Len(SA)
А вообще, в первом случае ты передаешь NULL, почему не передаешь его во втором, дарагой?
Номер ответа: 6
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #6
Добавлено: 02.06.06 18:29
VB относительно извращённо вызывает API... по причине внутренней реализации метода вызова, функцию GetLastError объявлять и использовать официально строго не рекомендуется. Err.LastDllError.
Номер ответа: 7
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #7
Добавлено: 02.06.06 22:24
Leha
GetLastError кроме ERROR_ALREADY_EXISTS может возвращать и другие значения (другие ошибки).
Ты же проверяешь только на соответствие одной ошибке и делаешь непонятные выводы о неработоспостобности GetLastError.
Неправильно заполненая структура Security_Attributes тоже может быть источником ошибки, и она (ошибка) будет совсем не ERROR_ALREADY_EXISTS. Передавай ноль вместо структуры. Если первый параметр задекларирован as any - измени на Byval param1 as long и передавай ноль. И всё будет нормально.
Номер ответа: 8
Автор ответа:
Leha
Вопросов: 37
Ответов: 68
Профиль | | #8
Добавлено: 03.06.06 17:10
Мне очень льстит что ты меня считаешь полным тупе...нем,
GetLastError возращает 0, а вот имя переменой начинающееся с lp значит что эта пременная ВАЗВРАЩАЕТ значение, а не передает ее.
К тому же это не единственный код который я пробавал.
Если кого интересует эта тема, то нкда юзать OpenMutex и если он вазвращает палажительное значение то мютекс существует
Номер ответа: 9
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #9
Добавлено: 04.06.06 00:51
вот видишь, работает таки GetLastError (возвращает ноль). Если бы не работала - падала бы твоя прога при её вызове.
а вот имя переменой начинающееся с lp значит что эта пременная ВАЗВРАЩАЕТ значение, а не передает ее
Это ты погорячился Можно начать имя переменной с какого угодно сочетания букв (например bla) - работа ф-ции от этого не изменится
Номер ответа: 10
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #10
Добавлено: 06.06.06 10:19
имя переменой начинающееся с lp значит что эта пременная ВАЗВРАЩАЕТ значение, а не передает ее
lp - long pointer - означает что передается указатель на переменную. Возвращать функция через этот указатель тебе ничего не обязана. И использовать значение этой переменной, которое ты ей присвоишь, может запросто.
Мне очень льстит что ты меня считаешь полным тупе...нем
Видимо, не без осонований Не обижайся, я так шучу.
Номер ответа: 11
Автор ответа:
Fever
Вопросов: 60
Ответов: 808
Профиль | | #11
Добавлено: 07.06.06 12:51
Вам всем в оффтоп.
зы А почему на форуме нет отдела для сишников?
Номер ответа: 12
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #12
Добавлено: 07.06.06 13:17
Действительно, надо переименовать форум "Ассемблер" в "Серьезное программирование" и обсуждать там C++ и асм