Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.186.173] |
|
Сообщ.
#1
,
|
|
|
Народ, если кто знает - подскажите, ежели не в лом!
Lamer, будь человеком! |
Сообщ.
#2
,
|
|
|
Ну, мутекс не подключается, он создаётся в памяти! Тем более это было лишь предложение. Можно сполне обойтись без мутекса. Например, главная программа, которая содержит све нужные ей компоненты, запускает раза три маленькую прогу, задача которой лишь проверять запущена ли главная программа. Вот реальная экономия памяти. Можно также, чтобы одинаковые экземпляры обращались в главную библиотеку, ф-ии которой вызывались бы как АПИ ф-ии. Это тоже реальная экономия! Наконец, все экземпляры были бы по коду уникальны и содержали несвязанные между собой операции, например, один экзешник проверяет, нажат ли пробел, вторая отображает форму, третий - проверяет почту на ящике и т. п. Кстати, с помощью мутекса, эти проги могли бы даже обмениваться информацией.
Ну я постараюсь найти что-нибудь по мутексам и семафорам, может сам чего наберу! Ну в общем скоро я сюда эту доку закину. Но на твоём месте я бы подумал над другими предложенными мной вариантами. |
Сообщ.
#3
,
|
|
|
короче, я нашел пример создания мутекса на си, и представил себе, что на басике это должно выглядеть приблизительно так: Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As SECURITY_ATTRIBUTES, ByVal bInitialOwner As Long, ByVal lpName As String) As Long Dim hMutex As Long Dim x As SECURITY_ATTRIBUTES hMutex = CreateMutex(x, False, "fuckingшицмазафака_mutex") получаю hMutex=0. Позвольте, а где же яйца? В смысле мутекс? УУУ как все запущенооооо!!!!!! |
Сообщ.
#4
,
|
|
|
Во чего нашел!!
http://www.allapi.net/agnet/apiguide.php 'This code must be pasted into a module 'Set the project's startup object to 'Sub Main' (-> Project -> Project Properties -> General Tab -> Startup Object) Public Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As SECURITY_ATTRIBUTES, ByVal bInitialOwner As Long, ByVal lpName As String) As Long Public Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type Public Const ERROR_ALREADY_EXISTS = 183& Private Sub Main() 'KPD-Team 1999 'URL: http://www.allapi.net/ 'E-Mail: KPDTeam@Allapi.net ' -> code by Raist Lin Dim sa As SECURITY_ATTRIBUTES sa.bInheritHandle = 1 sa.lpSecurityDescriptor = 0 sa.nLength = Len(sa) 'Try to create a new Mutex Debug.Print CreateMutex(sa, 1, App.Title) Debug.Print Err.LastDllError 'Check if the function was succesfull If (Err.LastDllError = ERROR_ALREADY_EXISTS) Then 'More than one instance detected MsgBox "More than one instance" Else 'No other instance detected... 'Your program-load code here End If End Sub |
Сообщ.
#5
,
|
|
|
ну ладно. мутекс я создал. хендел его знаю, и как зовут тоже, а дальше-то что???
|
Сообщ.
#6
,
|
|
|
А дальше вот что - надо создать поток, который дождется освобождения мутекса:
WaitForSingleObject hMutex, INFINITE и выполнит нужны нам код. спасибо тебе Lamer! если возникнут вопросы - мыльте, покажу исходники ))) |
Сообщ.
#7
,
|
|
|
Блин, а я уже доку собрался сюда выкидовать! Ну ладно, я рад, что ты сам доехал до создания мутекса!
|