2008-08-04 17 views
20

Zaimportowałem bibliotekę kernel32. Tak więc dostępna jest funkcja createMutex, ale nie jestem całkiem pewien różnych parametrów i wartości zwracanych.Jak używać muteksu w Visual Basic

To jest klasyczny Visual Basic, a nie Visual Basic.NET, ale prawdopodobnie mogę pracować z dowolnym językiem w formie odpowiedzi.

Odpowiedz

7

Kod VB wygląda mniej więcej tak:

hMutex = CreateMutex(ByVal 0&, 1, ByVal 0&) 

Pierwszy parametr to wskaźnik do struktury SECURITY_ATTRIBUTES. Jeśli nie wiesz, co to jest, nie potrzebujesz tego. Przekaż NULL (0).

Drugi parametr to TRUE (niezerowy lub 1), jeśli wątek wywołujący powinien przejąć własność muteksa. FALSE w przeciwnym razie.

Trzeci parametr jest nazwą muteksu i może mieć wartość NULL (0), jak pokazano. Jeśli potrzebujesz nazwanego muteksa, podaj nazwę (wszystko, co jest unikalne). Nie wiesz, czy opakowanie jednostkowe VB marnuje prefiks o długości z prefiksem VB (BSTR) na łańcuch znaków ASCII/Unicode zakończony znakiem Null, jeśli nie, będziesz potrzebować Aby to zrobić i istnieją liczne przykłady.

Powodzenia!

2

Cóż, na podstawie documentation to wygląda:

  1. atrybutami bezpieczeństwa (można przekazać null)
  2. Czy to początkowo własność (można przechodzić false)
  3. Nazwa niej

HTH

9

Oto deklaracje VB6 dla CreateMutex - Właśnie skopiowałem je z przeglądarki API, którą powinieneś mieć w ramach swojej instalacji VB6. VB6 zamienia łańcuchy na ANSI z zakończeniem o wartości NUL, używając aktualnej strony kodowej.

Public Type SECURITY_ATTRIBUTES 
    nLength As Long 
    lpSecurityDescriptor As Long 
    bInheritHandle As Long 
End Type 

Public Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" _ 
    (lpMutexAttributes As SECURITY_ATTRIBUTES, ByVal bInitialOwner As Long, _ 
    ByVal lpName As String) As Long 

Należy pamiętać, że jeśli utworzyć mutex z IDE VB6, mutex należący do IDE i nie zostaną zniszczone, gdy przestanie działać program - tylko po zamknięciu IDE.

Powiązane problemy