Solved

Sleep functon from kernel Library works inconsistent in VBA

Posted on 2008-10-10
4
1,311 Views
Last Modified: 2013-11-27
I have a program that uses the sleep function in VBA from the kernel library.

It has a tendency to work inconsistently.  All of the sudden it will start to run really slowly.  I will have to turn the time down from 1 to .1 in order to get it to work at the speed it used to.  

There are not any other programs running that would "slow" it down.  I am running the application on a core 2 processor.

Is there any other functions I can use to delay something by a millesecond?  Perhaps something that may act more consistent.

Thanks,
JOe K.
Public timerCounter As Integer

Const TIMERLIMIT = 1

Private Declare Sub sapiSleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
 

Sub sSleep(lngMilliSec As Long)

    If lngMilliSec > 0 Then

        Call sapiSleep(lngMilliSec)

    End If

End Sub

Open in new window

0
Comment
Question by:ClaudeWalker
  • 2
4 Comments
 
LVL 119

Accepted Solution

by:
Rey Obrero earned 500 total points
ID: 22688841
i am just using

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

and to delay i just use

sleep 500  ' or any other value
0
 
LVL 57
ID: 22688897
 
  Your not not going to get that fine of control outside of running in the OS kernel.  A thread shift alone can easily takes 15ms or more.  You'd have to be running in a process that was no swapable and with a high priority.

  I'm curious; what are you trying to do that takes such fine control?

JimD.
0
 

Author Comment

by:ClaudeWalker
ID: 22689059
Using the Alias and calling the other sub was the slowing down issue as far as I can tell. Because the problem is intermittent only time will tell.

Here is the code I am using sleep for.

I created a "screen saver" to prevent burnin on our IO board screen.  Runs every 30 minutes and it cycles from red to blue to green to yellow to blue to red again.  It takes about 30 seconds  Then displays whose gone and whose in the office.  



If timerCounter = TIMERLIMIT Then

        For v = 1 To 36

            For Each ctl In Me.Controls

                If ctl.ControlType = acLabel Then

                    numCtls = numCtls + 1

                    If v = 1 Then

                        ctl.Caption = ""

                        backCol = 10001000

                        ctl.BorderStyle = 0

                    End If

                    

                    If v = 36 Then

                        ctl.BorderStyle = 1

                    End If

                    

                    ctl.BackColor = backCol

                End If

                

                If v < 19 Then

                    backCol = backCol + 20

                Else

                    backCol = backCol - 20

                End If

                                

                Me.Repaint

                Sleep 3

            Next ctl

        Next v

        

        timerCounter = 0

    End If

Open in new window

0
 

Author Comment

by:ClaudeWalker
ID: 22689520
I moved it to a slower computer and sleep didn't work as well.  It seemed to round up after .5 for the number of milleseconds.  I .5 was close but I needed more like .7 and it went as slow as 1.

I made a ghetto solution.

For ghettoTimer = 1 to 150000

next ghettoTimer

It gave much more control and seemed to work well.

Thanks,
JOe K.
0

Featured Post

Backup Your Microsoft Windows Server®

Backup all your Microsoft Windows Server – on-premises, in remote locations, in private and hybrid clouds. Your entire Windows Server will be backed up in one easy step with patented, block-level disk imaging. We achieve RTOs (recovery time objectives) as low as 15 seconds.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I see at least one EE question a week that pertains to using temporary tables in MS Access.  But surprisingly, I was unable to find a single article devoted solely to this topic. I don’t intend to describe all of the uses of temporary tables in t…
You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
Familiarize people with the process of utilizing SQL Server stored procedures from within Microsoft Access. Microsoft Access is a very powerful client/server development tool. One of the SQL Server objects that you can interact with from within Micr…
In Microsoft Access, learn how to use Dlookup and other domain aggregate functions and one method of specifying a string value within a string. Specify the first argument, which is the expression to be returned: Specify the second argument, which …

910 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now