الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

المؤقت ذو الدقة العالية - High Resolution Timer

بدأه najy_zl في 20 فبراير 2014 · 0 رد · 370 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1

السلام عليكم...

 

أداة الـ Timer تعتمد على تردد دقات ساعة النظام (TickCount) بوحدة الملي ثانية (milliseconds) و بالتالي فأقل قيمة لها هي 1 (أي 1 ملي ثانية) بالإضافة إلى أنها تصبح غير دقيقة عند استعمال قيم صغيرة.

 

البديل هو استعمال ما يسمى بـ "المؤقت ذي الدقة العالية" (High Resolution Timer) و ذلك باستخدام دوال API كالتالي:

 

1. ضع التصريحات و الإجراء التالي في بداية كود الـ Class:

    Private Declare Function QueryPerformanceCounter Lib "kernel32" (ByRef lpPerformanceCount As Long) As Integer
    Private Declare Function QueryPerformanceFrequency Lib "kernel32" (ByRef lpFrequency As Long) As Integer

    Private ContinueTimer As Boolean = False    ' لتشغيل أو إيقاف المؤقت

    Private Sub TimerProcedure()
        Dim Frequency As Long
        Dim StartCount As Long
        Dim EndCount As Long

        ' QueryPerformanceFrequency gives the frequency as Counts per Second:
        If QueryPerformanceFrequency(Frequency) = 0 Then
            MsgBox("النظام لا يدعم المؤقتات ذات الدقة العالية")
            Exit Sub
        End If

        Do While ContinueTimer
            ' QueryPerformanceCounter gives the current Counter value:
            QueryPerformanceCounter(StartCount)
            Do
                QueryPerformanceCounter(EndCount)
            Loop While ((EndCount - StartCount) / Frequency) < 0.0001    ' القيمة بالثواني و يمكن أن تكون كسرية - أي أجزاء من الثانية

            ' ======== أدناه ضع الكود الذي تريد تنفيذه كلما انقضت المدة المحددة DoEvents بين هذا السطر و جملة =========
            '....
            '....
            '....
            ' ======================================================================

            Application.DoEvents()      ' مهمة جداً جداً
        Loop
    End Sub

2. في إجراء الحدث FormClosing اكتب السطر التالي (مهم):

ContinueTimer = False

3. عندما تريد تشغيل المؤقت استعمل السطرين التاليين:

ContinueTimer = TrueTimerProcedure()

4. عندما تريد إيقاف المؤقت استعمل السطر التالي:

ContinueTimer = False

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

مواضيع مشابهة