Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: sharpc.livejournal.com
 Профиль | | #12
Добавлено: 07.06.06 13:17
Действительно, надо переименовать форум "Ассемблер" в "Серьезное программирование" и обсуждать там C++ и асм :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам