2008-08-04 38 views
20

Tôi đã nhập thư viện kernel32. Vì vậy, tôi có chức năng createMutex nhưng tôi không hoàn toàn chắc chắn về các thông số khác nhau và giá trị trả về.Cách sử dụng mutex trong Visual Basic

Đây là Visual Basic cổ điển, không phải Visual Basic.NET nhưng tôi có thể làm việc với một trong hai ngôn ngữ dưới dạng câu trả lời.

Trả lời

7

Mã VB trông giống như sau:

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

Tham số đầu tiên là con trỏ đến cấu trúc SECURITY_ATTRIBUTES. Nếu bạn không biết nó là gì, bạn không cần nó. Vượt qua NULL (0).

Tham số thứ hai là TRUE (khác 0 hoặc 1) nếu chuỗi cuộc gọi phải sở hữu mutex. FALSE nếu không.

Tham số thứ ba là tên mutex và có thể là NULL (0), như được hiển thị. Nếu bạn cần một mutex được đặt tên, hãy chuyển tên (bất kỳ thứ gì) vào. Không chắc chắn liệu các số nguyên đơn bao gồm VB có tiền tố là VB loại chuỗi (BSTR) cho chuỗi vô hạn Ascii/Unicode nếu không, bạn sẽ cần để làm điều đó và rất nhiều ví dụ được ra khỏi đó.

Chúc may mắn!

2

Vâng, dựa trên documentation nó trông giống như:

  1. thuộc tính Security (có thể vượt qua null)
  2. Cho dù đó là sở hữu ban đầu (có thể vượt qua false)
  3. Tên của nó

HTH

9

Dưới đây là các khai báo VB6 cho CreateMutex - Tôi vừa sao chép chúng từ trình xem API, mà bạn nên có như là một phần của cài đặt VB6 của bạn. VB6 marshalls chuỗi để null-chấm dứt ANSI bằng cách sử dụng trang mã hiện tại.

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 

Hãy nhớ rằng nếu bạn tạo một mutex từ IDE VB6, mutex thuộc về IDE và sẽ không bị hủy khi bạn ngừng chạy chương trình - chỉ khi bạn đóng IDE.

Các vấn đề liên quan