Sleep the Main Thread
From Rosetta Code
Programming Task
This is a programming task. It lays out a problem which Rosetta Code users are encouraged to solve, using languages they know.
Write a program that does the following in this order:
- Input an amount of time to sleep in whatever units are most natural for your language (milliseconds, seconds, ticks, etc.). This unit should be noted in comments or in a description.
- Print "Sleeping..."
- Sleep the main thread for the given amount of time.
- Print "Awake!"
- End.
Contents |
[edit] Ada
The Ada delay statement takes an argument of type Duration, which is a real number counting the number of seconds to delay. Thus, 2.0 will delay 2.0 seconds, while 0.001 will delay 0.001 seconds.
with Ada.Text_Io; use Ada.Text_Io; with Ada.Float_Text_Io; use Ada.Float_Text_Io; procedure Sleep is In_Val : Float; begin Get(In_Val); Put_Line("Sleeping..."); delay Duration(In_Val); Put_Line("Awake!"); end Sleep;
[edit] BASIC
Works with: QuickBasic version 4.5
INPUT sec 'the SLEEP command takes seconds PRINT "Sleeping..." SLEEP sec PRINT "Awake!"
"SLEEP" with no argument will sleep until a button is pressed on the keyboard (including modifier keys such as shift or control). Also, pressing a key while SLEEP is waiting for a specific amount of time (as above) will end the SLEEP.
[edit] C++
#include <unistd.h> #include <iostream> using namespace std; int main(int argc, char* argv[]) { useconds_t microseconds; cin >> microseconds; cout << "Sleeping..." << endl; usleep(microseconds); cout << "Awake!" << endl; return 0; }
[edit] Forth
: sleep ( ms -- ) ." Sleeping..." ms ." awake." cr ;
[edit] Haskell
import Control.Concurrent
main = do seconds <- readLn
putStrLn "Sleeping..."
threadDelay $ round $ seconds * 1000000
putStrLn "Awake!"
[edit] Java
import java.util.Scanner; public class Sleep{ public static void main(String[] args) throws InterruptedException{ Scanner input = new Scanner(System.in); int ms = input.nextInt(); //Java's sleep method accepts milliseconds System.out.println("Sleeping..."); Thread.sleep(ms); System.out.println("Awake!"); } }
[edit] OCaml
#load "unix.cma";; let seconds = read_int ();; print_endline "Sleeping...";; Unix.sleep seconds;; (* number is integer in seconds *) print_endline "Awake!";;
[edit] Perl
seconds:
$seconds = <>; print "Sleeping...\n"; sleep $seconds; # number is in seconds print "Awake!\n";
microseconds and nanoseconds using the Time::HiRes module:
use Time::HiRes qw( usleep nanosleep ); $microseconds = <>; print "Sleeping...\n"; usleep $microseconds; print "Awake!\n"; $nanoseconds = <>; print "Sleeping...\n"; nanosleep $nanoseconds; print "Awake!\n";
[edit] Python
import time seconds = float(raw_input()) print "Sleeping..." time.sleep(seconds) # number is in seconds ... but accepts fractions # Minimum resolution is system dependent. print "Awake!"
[edit] Tcl
set seconds [gets stdin] puts Sleeping... after [expr $seconds*1000] puts Awake!
[edit] Toka
This makes use of the sleep() function from libc which suspends execution for a specified number of seconds.
1 import sleep as sleep() [ ." Sleeping...\n" sleep() drop ." Awake!\n" bye ] is sleep 45 sleep
Categories: Programming Tasks | Basic language learning | Ada | BASIC | C++ | Forth | Haskell | Java | OCaml | Perl | Python | Tcl | Toka

