SimpsoN_Bart Posted June 27, 2012 Share Posted June 27, 2012 [font="Tahoma"]_Singleton fonksiyonu biraz uzun olduğu için üzerinde inceleme ve araştırma yaparak bu fonksiyonu geliştirdim. Bu fonksiyon Thread'lerin çakışmasını önler ve bu mutex sayesinde olur Mutex, Process Control Blockun içinde bulunan bir çeşit global değişkendir; açılımı mutual exclusion dur [size=2]ve deadlock (işlemler düğümünü) önlemek için threadlerinkullandığı bir değişkendir. Bir thread CPU, I/O vb. gibi bir yerde işlemyapacağı zaman mutex değişkenine değer atarak o alanı kullanıldığını ifadeeder. Bu sırada başka bir thread tarafından o alanda işlem yapılacaksa mutexinsıfırlanmasını bekler ve daha sonra kendisi mutexe değer atarak işleminigerçekleştirir.Özet olarak aynı işlemden ancak bir tane açmanızı sağlar.[/size][/font][size=2][/size] [font="Tahoma"][size=2] [/size][/font] [font="Tahoma"][size=2][codebox]If _SINGLETON_V2(@ScriptName, 1) Then Exit MsgBox(16, "Hata!", " " & @ScriptName & " zaten çalışıyor! ", 5) _SINGLETON_V2(@ScriptName, 0) $GUI = GUICreate("Form1", 370, 146, 192, 124) GUISetState() While 1 If GUIGetMsg() = -3 Then Exit WEnd Func _SINGLETON_V2($SCRIPTNAME, $PARAM) Local Const $MUTEX_ALL_ACCESS = 0x1F0001 If $PARAM = 1 Then Local $RTN = DllCall("kernel32.dll", "hwnd", "OpenMutex", _ "int", $MUTEX_ALL_ACCESS, _ "int", False, _ "str", $SCRIPTNAME) Return $RTN[0] ElseIf $PARAM <> 1 Then DllCall("kernel32.dll", "hwnd", "CreateMutex", _ "int", 0, _ "int", False, _ "str", $SCRIPTNAME) Return 1 EndIf Return 0 EndFunc ;==>_SINGLETON_V2 [/codebox] [/size][/font] Quote Link to comment Share on other sites More sharing options...
mesale0077 Posted June 27, 2012 Share Posted June 27, 2012 (edited) kardeş çalışmalarını mükemmel ve beyenerek takip ediyorum.Bu arada emeginize saygı duyuyorum. yazmış olduğun kodda, @ScriptName yazdığımızda tekrar aynı proğram çalışmıyor ama aynı proğramın kopyasını yapıp adını değiştirip çalıştırdığımızda farklı bir proğram gibi çalışıyor. benim aklıma bir şey geldi kodu bu şekil yaptığımızda ,kendisi 2 defa çalışmıyor ve kopyasıda çalışmıyor yani çalışan bir program oluyor. [code]If _SINGLETON_V2('SINGLETON_V2', 1) Then Exit MsgBox(16, "Hata!", " " &'SINGLETON_V2' & " zaten çalışıyor! ", 5) _SINGLETON_V2('SINGLETON_V2', 0) $GUI = GUICreate("SINGLETON_V2", 370, 146, 192, 124) GUISetState() While 1 If GUIGetMsg() = -3 Then Exit WEnd Func _SINGLETON_V2($SCRIPTNAME, $PARAM) Local Const $MUTEX_ALL_ACCESS = 0x1F0001 If $PARAM = 1 Then Local $RTN = DllCall("kernel32.dll", "hwnd", "OpenMutex", _ "int", $MUTEX_ALL_ACCESS, _ "int", False, _ "str", $SCRIPTNAME) Return $RTN[0] ElseIf $PARAM <> 1 Then DllCall("kernel32.dll", "hwnd", "CreateMutex", _ "int", 0, _ "int", False, _ "str", $SCRIPTNAME) Return 1 EndIf Return 0 EndFunc ;==>_SINGLETON_V2 [/code] [code]Local $list = ProcessList() For $i = 1 To $list[0][0] MsgBox(0, $list[$i][0], $list[$i][1]) Next ; List just notepad.exe processes $list = ProcessList("notepad.exe") For $i = 1 To $list[0][0] MsgBox(0, $list[$i][0], $list[$i][1]) Next [/code] bunu kullanmalıyım yoksa farklı bir yöntem varmı? proğram monitor ,yada çalışan proğram listesi yapmak istiyorum,her hangi proğram çalıştığında proğram adı çalışma saati ve kapanış saati log tutması nasıl yaparız. regstry de bir yere böyle bir kayıt yapıyormu buna benzer regstryda kaydı gördüm shellrun altındaydı galiba ellerine sağlık hayırlı çalışmalar Edited June 27, 2012 by mesale0077 Quote Link to comment Share on other sites More sharing options...
SimpsoN_Bart Posted June 27, 2012 Author Share Posted June 27, 2012 [font="Tahoma"]Orda fonksiyonda macro yazdığım yere scriptin değişmez adını yazarsan sorun olamaz yani ben genel olarak makro kullandım.Bu arada pid değeri için ProcessExists komutunu kullabilirsin diğer sorun için sence doğru yere burası mı ?[/font] Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.