1ms timer calling functions

Hi,
For testing purposes I have this timer that calls a function every 1ms and adds +1 to a counter. This code works perfectly fine as its calling windows native code but is there anything in the .NET framework even close to 1ms or shall I stick to using native calls?

Public Class Form1
    Dim mHandler As TimerEventHandler
    Dim iCount As Long = 0
    Dim mTimerId As Integer

    <DllImport("winmm.dll")>
    Private Shared Function timeSetEvent(delay As Integer, resolution As Integer, handler As TimerEventHandler, user As IntPtr, eventType As Integer) As Integer
    End Function

    <DllImport("winmm.dll")>
    Private Shared Function timeBeginPeriod(millisecond As Integer) As Integer
    End Function

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        timeBeginPeriod(1)
        mHandler = New TimerEventHandler(AddressOf TimerCallback)
        mTimerId = timeSetEvent(1, 0, mHandler, IntPtr.Zero, 1)
    End Sub

    Private Delegate Sub TimerEventHandler(id As Integer, msg As Integer, user As IntPtr, dw1 As Integer, dw2 As Integer)
    Private Sub TimerCallback(id As Integer, msg As Integer, user As IntPtr, dw1 As Integer, dw2 As Integer)
        iCount += 1
    End Sub
End Class

Open in new window

LVL 1
XK8ERAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

anarki_jimbelSenior DeveloperCommented:
It's not quite clear what you want or what's required.

You may use stopwatch class to measure time elapsed: https://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch(v=vs.110).aspx
You may measure in milliseconds or in ticks. 1 tick - 100 ns.

Also you may use DateTime.Ticks property to measure times:
https://msdn.microsoft.com/en-us/library/system.datetime.ticks(v=vs.110).aspx
0
XK8ERAuthor Commented:
using DateTime is not a good suggestion as it has a resolution of about 15ms and also stopwatch is not good unless you use high resolution stopwatch.

the questions here is more of a concern than anything else, so i'm just worried if there are any casualties by using this code in a production environment or if it is a safe call.
0
anarki_jimbelSenior DeveloperCommented:
DateTime - correct  : )

I can't really see any problems with using Windows API.

On another hand, my understanding is that if a system supports high performance counters the .net stopwatch should be high resolution stopwatch. Have a look: https://msdn.microsoft.com/en-us/library/windows/desktop/dn553408(v=vs.85).aspx
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Visual Basic.NET

From novice to tech pro — start learning today.