ZetCode

FreeBasic Sleep Keyword

last modified June 16, 2025

The FreeBasic Sleep keyword pauses program execution for a specified number of milliseconds. It's useful for creating delays, controlling timing, and reducing CPU usage in loops.

Basic Definition

In FreeBasic, Sleep is a built-in procedure that suspends program execution. It takes one parameter - the number of milliseconds to pause.

The Sleep function is platform-independent and provides a simple way to add delays. It's commonly used in games, animations, and user interfaces to control timing.

Simple Sleep Example

This basic example demonstrates the simplest usage of the Sleep keyword.

simple_sleep.bas
Print "Program started"
Sleep 2000  ' Pause for 2 seconds
Print "Program resumed after 2 seconds"

Here we print a message, pause execution for 2000 milliseconds (2 seconds), then print another message. The Sleep call blocks all program execution during the pause.

Sleep in a Loop

Sleep is often used in loops to control the speed of iteration.

sleep_loop.bas
For i As Integer = 1 To 5
    Print "Count: "; i
    Sleep 1000  ' Pause for 1 second between counts
Next

This example counts from 1 to 5 with a 1-second delay between each number. Without Sleep, the loop would execute too quickly to see each count.

Creating a Simple Timer

We can use Sleep to build a basic countdown timer.

countdown_timer.bas
Dim seconds As Integer = 10

While seconds > 0
    Print "Time remaining: "; seconds; " seconds"
    Sleep 1000
    seconds -= 1
Wend

Print "Time's up!"

This creates a 10-second countdown timer that updates every second. The Sleep ensures each iteration takes exactly 1 second, making the timer accurate.

Animation with Sleep

Sleep can help create simple text animations by controlling frame rate.

text_animation.bas
Dim frames(3) As String = {"-", "\", "|", "/"}

For i As Integer = 1 To 20
    Print "Loading "; frames(i Mod 4); " "; i * 5; "%"
    Sleep 150  ' 150ms delay creates smooth animation
    Cls  ' Clear screen for next frame
Next

This example shows a spinning loader animation with percentage progress. The Sleep controls animation speed. Without it, the animation would be too fast to see.

User Input Delay

Sleep can provide a pause before requesting user input.

input_delay.bas
Print "Important message incoming..."
Sleep 3000
Print "The system will reboot in 5 minutes!"
Print "Press any key to cancel..."
Sleep

This shows a message after a 3-second delay. The second Sleep with no parameters waits indefinitely for a keypress. This creates a pause for user interaction.

CPU Usage Reduction

Sleep can reduce CPU usage in polling loops.

cpu_usage.bas
Dim done As Boolean = False

While Not done
    ' Check for some condition
    If GetKeyState(27) Then  ' ESC key pressed
        done = True
    End If
    
    Sleep 100  ' Reduce CPU usage by pausing between checks
Wend

Print "Loop exited"

This loop checks for the ESC key but includes a 100ms Sleep to prevent CPU overuse. Without Sleep, the loop would run as fast as possible, consuming significant CPU resources.

Precise Timing with Sleep

For more precise timing, Sleep can be combined with timers.

precise_timing.bas
Dim startTime As Double = Timer
Dim targetDelay As Integer = 2000  ' 2 seconds

While (Timer - startTime) * 1000 < targetDelay
    ' Do some work here
    Print "Working..."
    Sleep 100  ' Small sleep to reduce CPU usage
Wend

Print "Precise 2 second delay completed"

This example shows how to create more precise timing than Sleep alone provides. The loop runs with small Sleeps while checking the actual elapsed time using the Timer function.

Best Practices

This tutorial covered the FreeBasic Sleep keyword with practical examples showing its usage in different scenarios.

Author

My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.

List all FreeBasic Tutorials.