掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VBでセマフォをつかえますか? (ID:119136)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
環境を書いていないのでVB6だと仮定して簡単なサンプル。 同時起動個数を3つに限定します。複数起動させたくないなら数字を適切に変えればOK. 同期処理なら応用してください。 .netならこれに載っているAPI名で調べてみてください。 Option Explicit Private Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type Private Declare Function OpenSemaphore Lib "kernel32" Alias "OpenSemaphoreA" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal lpName As String) As Long Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Private Declare Function ReleaseSemaphore Lib "kernel32" (ByVal hSemaphore As Long, ByVal lReleaseCount As Long, lpPreviousCount As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function CreateSemaphore Lib "kernel32" Alias "CreateSemaphoreA" (lpSemaphoreAttributes As SECURITY_ATTRIBUTES, ByVal lInitialCount As Long, ByVal lMaximumCount As Long, ByVal lpName As String) As Long Dim hSemaphore As Long Private Sub Form_Load() Dim result As Long Dim d As SECURITY_ATTRIBUTES Dim SEMAPHORE_NAME As String SEMAPHORE_NAME = "セマフォの名前" ' セマフォオブジェクトの作成/取得 hSemaphore = CreateSemaphore(d, 3, 3, SEMAPHORE_NAME) result = WaitForSingleObject(hSemaphore, 0) ' すでに3つ開いているかどうか判定 If result <> 0 Then MsgBox ("既に3つ開いている") Call CloseHandle(hSemaphore) Unload Me End If End Sub Private Sub Form_Terminate() ' 解放 Call ReleaseSemaphore(hSemaphore, 1, 0) Call CloseHandle(hSemaphore) End Sub
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.