Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Sleep functon from kernel Library works inconsistent in VBA

Posted on 2008-10-10
4
Medium Priority
?
1,343 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
4 Comments
 
LVL 120

Accepted Solution

by:
Rey Obrero (Capricorn1) earned 2000 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 58
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

What is SQL Server and how does it work?

The purpose of this paper is to provide you background on SQL Server. It’s your self-study guide for learning fundamentals. It includes both the history of SQL and its technical basics. Concepts and definitions will form the solid foundation of your future DBA expertise.

Question has a verified solution.

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

This article describes two methods for creating a combo box that can be used to add new items to the row source -- one for simple lookup tables, and one for a more complex row source where the new item needs data for several fields.
Access custom database properties are useful for storing miscellaneous bits of information in a format that persists through database closing and reopening.  This article shows how to create and use them.
Using Microsoft Access, learn some simple rules for how to construct tables in a relational database. Split up all multi-value fields into single values: Split up fields that belong to other things into separate tables: Make sure that all record…
With Microsoft Access, learn how to specify relationships between tables and set various options on the relationship. Add the tables: Create the relationship: Decide if you’re going to set referential integrity: Decide if you want cascade upda…
Suggested Courses

610 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