Sleep: Difference between revisions

From Rosetta Code
Content added Content deleted
(C)
No edit summary
Line 11: Line 11:
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.
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.


<ada>with Ada.Text_Io; use Ada.Text_Io;
<lang ada>with Ada.Text_Io; use Ada.Text_Io;
with Ada.Float_Text_Io; use Ada.Float_Text_Io;
with Ada.Float_Text_Io; use Ada.Float_Text_Io;
Line 21: Line 21:
delay Duration(In_Val);
delay Duration(In_Val);
Put_Line("Awake!");
Put_Line("Awake!");
end Sleep;</ada>
end Sleep;</lang>


=={{header|BASIC}}==
=={{header|BASIC}}==
{{works with|QuickBasic|4.5}}
{{works with|QuickBasic|4.5}}
<qbasic>INPUT sec 'the SLEEP command takes seconds
<lang qbasic>INPUT sec 'the SLEEP command takes seconds
PRINT "Sleeping..."
PRINT "Sleeping..."
SLEEP sec
SLEEP sec
PRINT "Awake!"</qbasic>
PRINT "Awake!"</lang>
"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.
"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.


Line 37: Line 37:
The function <tt>sleep</tt> needs seconds, which are read from the standard input.
The function <tt>sleep</tt> needs seconds, which are read from the standard input.


<c>#include <stdio.h>
<lang c>#include <stdio.h>
#include <unistd.h>
#include <unistd.h>


Line 48: Line 48:
printf("Awake!\n");
printf("Awake!\n");
return 0;
return 0;
}</c>
}</lang>


=={{header|C++}}==
=={{header|C++}}==


<cpp>#include <unistd.h>
<lang cpp>#include <unistd.h>
#include <iostream>
#include <iostream>


Line 65: Line 65:
cout << "Awake!" << endl;
cout << "Awake!" << endl;
return 0;
return 0;
}</cpp>
}</lang>


=={{header|Common Lisp}}==
=={{header|Common Lisp}}==
Line 110: Line 110:


=={{header|Java}}==
=={{header|Java}}==
<java>import java.util.Scanner;
<lang java>import java.util.Scanner;


public class Sleep{
public class Sleep{
Line 120: Line 120:
System.out.println("Awake!");
System.out.println("Awake!");
}
}
}</java>
}</lang>


=={{header|OCaml}}==
=={{header|OCaml}}==


<ocaml>#load "unix.cma";;
<lang ocaml>#load "unix.cma";;
let seconds = read_int ();;
let seconds = read_int ();;
print_endline "Sleeping...";;
print_endline "Sleeping...";;
Unix.sleep seconds;; (* number is integer in seconds *)
Unix.sleep seconds;; (* number is integer in seconds *)
print_endline "Awake!";;</ocaml>
print_endline "Awake!";;</lang>


or
or
<ocaml>#load "unix.cma";;
<lang ocaml>#load "unix.cma";;
#directory "+threads";;
#directory "+threads";;
#load "threads.cma";;
#load "threads.cma";;
Line 137: Line 137:
print_endline "Sleeping...";;
print_endline "Sleeping...";;
Thread.delay seconds;; (* number is in seconds ... but accepts fractions *)
Thread.delay seconds;; (* number is in seconds ... but accepts fractions *)
print_endline "Awake!";;</ocaml>
print_endline "Awake!";;</lang>


=={{header|Perl}}==
=={{header|Perl}}==


seconds:
seconds:
<perl>$seconds = <>;
<lang perl>$seconds = <>;
print "Sleeping...\n";
print "Sleeping...\n";
sleep $seconds; # number is in seconds
sleep $seconds; # number is in seconds
print "Awake!\n";</perl>
print "Awake!\n";</lang>


microseconds and nanoseconds using the Time::HiRes module:
microseconds and nanoseconds using the Time::HiRes module:
<perl>use Time::HiRes qw( usleep nanosleep );
<lang perl>use Time::HiRes qw( usleep nanosleep );


$microseconds = <>;
$microseconds = <>;
Line 158: Line 158:
print "Sleeping...\n";
print "Sleeping...\n";
nanosleep $nanoseconds;
nanosleep $nanoseconds;
print "Awake!\n";</perl>
print "Awake!\n";</lang>


=={{header|Python}}==
=={{header|Python}}==


<python>import time
<lang python>import time


seconds = float(raw_input())
seconds = float(raw_input())
Line 168: Line 168:
time.sleep(seconds) # number is in seconds ... but accepts fractions
time.sleep(seconds) # number is in seconds ... but accepts fractions
# Minimum resolution is system dependent.
# Minimum resolution is system dependent.
print "Awake!"</python>
print "Awake!"</lang>


=={{header|Ruby}}==
=={{header|Ruby}}==


<ruby>seconds = gets.to_f
<lang ruby>seconds = gets.to_f
puts "Sleeping..."
puts "Sleeping..."
sleep(seconds) # number is in seconds ... but accepts fractions
sleep(seconds) # number is in seconds ... but accepts fractions
# Minimum resolution is system dependent.
# Minimum resolution is system dependent.
puts "Awake!"</ruby>
puts "Awake!"</lang>


=={{header|Tcl}}==
=={{header|Tcl}}==

Revision as of 15:51, 3 February 2009

Task
Sleep
You are encouraged to solve this task according to the task description, using any language you may 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.

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.

<lang ada>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;</lang>

BASIC

Works with: QuickBasic version 4.5

<lang qbasic>INPUT sec 'the SLEEP command takes seconds PRINT "Sleeping..." SLEEP sec PRINT "Awake!"</lang> "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.

C

Works with: POSIX

The function sleep needs seconds, which are read from the standard input.

<lang c>#include <stdio.h>

  1. include <unistd.h>

int main() {

 unsigned int seconds;
 scanf("%u", &seconds);
 printf("Sleeping...\n");
 sleep(seconds);
 printf("Awake!\n");
 return 0;

}</lang>

C++

<lang cpp>#include <unistd.h>

  1. 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;

}</lang>

Common Lisp

(defun test-sleep ()
  (let ((seconds (read)))
    (format t "Sleeping...~%")
    (sleep seconds)
    (format t "Awake!~%")))

(test-sleep)

E

You can't do that.

No, really. E's approach to timing, concurrency, and IO is non-blocking; if you want to wait for something, you say what you want to do when it happens — i.e. callbacks. There are no threads of control which can be stopped — except automatically when they just have nothing to do.

So, the closest thing possible to the task description is to wait for the specified time to pass, then do whatever the next thing is.

def sleep(milliseconds :int, nextThing) {
    stdout.println("Sleeping...")
    timer.whenPast(timer.now() + milliseconds, fn {
        stdout.println("Awake!")
        nextThing()
    })
}

Forth

: sleep ( ms -- )
  ." Sleeping..."
  ms
  ." awake." cr ;

Haskell

import Control.Concurrent

main = do seconds <- readLn
          putStrLn "Sleeping..."
          threadDelay $ round $ seconds * 1000000
          putStrLn "Awake!"

Java

<lang 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!"); } }</lang>

OCaml

<lang ocaml>#load "unix.cma";; let seconds = read_int ();; print_endline "Sleeping...";; Unix.sleep seconds;; (* number is integer in seconds *) print_endline "Awake!";;</lang>

or <lang ocaml>#load "unix.cma";;

  1. directory "+threads";;
  2. load "threads.cma";;

let seconds = read_float ();; print_endline "Sleeping...";; Thread.delay seconds;; (* number is in seconds ... but accepts fractions *) print_endline "Awake!";;</lang>

Perl

seconds: <lang perl>$seconds = <>; print "Sleeping...\n"; sleep $seconds; # number is in seconds print "Awake!\n";</lang>

microseconds and nanoseconds using the Time::HiRes module: <lang perl>use Time::HiRes qw( usleep nanosleep );

$microseconds = <>; print "Sleeping...\n"; usleep $microseconds; print "Awake!\n";

$nanoseconds = <>; print "Sleeping...\n"; nanosleep $nanoseconds; print "Awake!\n";</lang>

Python

<lang python>import time

seconds = float(raw_input()) print "Sleeping..." time.sleep(seconds) # number is in seconds ... but accepts fractions

  1. Minimum resolution is system dependent.

print "Awake!"</lang>

Ruby

<lang ruby>seconds = gets.to_f puts "Sleeping..." sleep(seconds) # number is in seconds ... but accepts fractions

  1. Minimum resolution is system dependent.

puts "Awake!"</lang>

Tcl

set seconds [gets stdin]
puts Sleeping...
after [expr $seconds*1000]
puts Awake!

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