Sleep: Difference between revisions

From LemonWiki共筆
Jump to navigation Jump to search
Tags: Mobile edit Mobile web edit
 
(15 intermediate revisions by the same user not shown)
Line 1: Line 1:
Sleep random seconds in programming
Sleep random seconds in programming
{{LanguageSwitcher | content = [[Sleep | EN]], [[Sleep in Mandarin | 漢字]] }}


== MS-DOS on Windows ==
== MS-DOS on Windows ==
=== Approach 1: %RANDOM% + ping local ===
=== Approach 1: %RANDOM% + ping local ===
[https://stackoverflow.com/questions/8258087/bat-random-timeout batch file - .bat random timeout - Stack Overflow]
Purpose
* {{kbd | key=<nowiki>%RANDOM%</nowiki>}} returns an integer between 0 and 32767.
* Sleep random seconds between 5 ~ 60 seconds
* 60 is the range of values you want: 0 to 60.
* 32768 is the range of values returned by {{kbd | key=<nowiki>%RANDOM%</nowiki>}} (0 to 32767).
* 5 is the minimum value you want. The original range of values you want '0 to 60' became '5 ~ 65'.
* ping local address: {{kbd | key=<nowiki>/n <Count></nowiki>}} "Specifies the number of echo Request messages sent. The default is 4."<ref>[https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/ping time]</ref><ref>[https://stackoverflow.com/questions/735285/how-to-wait-in-a-batch-script windows xp - How to wait in a batch script? - Stack Overflow]</ref>


BAT file:
BAT file:
<pre>
<syntaxhighlight lang="Windows batch files">
REM print current date & time
REM print current date & time
ECHO %date% %time%
ECHO %date% %time%


REM sleep 5 ~ 65 seconds
REM sleep 5 ~ 60 seconds
SET /a timeout=%RANDOM% * 60 / 32768 + 5
SET /a timeout=%RANDOM% * 55 / 32767 + 5
ping 127.0.0.1 -n %timeout% > nul
ping 127.0.0.1 -n %timeout% > nul


REM print current date & time
REM print current date & time
ECHO %date% %time%
ECHO %date% %time%
</pre>
</syntaxhighlight>
 
Instruction<ref>[https://stackoverflow.com/questions/8258087/bat-random-timeout batch file - .bat random timeout - Stack Overflow]</ref>
* {{kbd | key=<nowiki>%RANDOM%</nowiki>}} returns an integer between 0 and 32767<ref>[https://ss64.com/nt/syntax-random.html Random Numbers - Windows CMD - SS64.com]</ref>.
* 55 is the range of values you want: 5 to 60.
* 32767 is the range of values returned by {{kbd | key=<nowiki>%RANDOM%</nowiki>}} (0 to 32767).
* 5 is the minimum value you want. The original range of values is '0 to 55'. After plus 5 the range became '5 ~ 65'.
* ping local address: {{kbd | key=<nowiki>/n <Count></nowiki>}} "Specifies the number of echo Request messages sent. The default is 4."<ref>[https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/ping time]</ref><ref>[https://stackoverflow.com/questions/735285/how-to-wait-in-a-batch-script windows xp - How to wait in a batch script? - Stack Overflow]</ref>


=== Approach 2: sleep package of CygWin ===
=== Approach 2: sleep package of CygWin ===
Line 46: Line 51:
ECHO %date% %time%
ECHO %date% %time%


REM sleep 5 ~ 65 seconds
REM sleep 5 ~ 60 seconds
SET /a timeout=%RANDOM% * 60 / 32768 + 5
SET /a timeout=%RANDOM% * 55 / 32767 + 5
C:\cygwin64\bin\sleep.exe %timeout%
C:\cygwin64\bin\sleep.exe %timeout%


Line 59: Line 64:
BAT file:
BAT file:
<pre>
<pre>
SET /a timeout=%RANDOM% * 60 / 32768 + 5
SET /a timeout=%RANDOM% * 55 / 32767 + 5
TIMEOUT %timeout%
TIMEOUT %timeout%


Line 106: Line 111:
# print current unix timestamp
# print current unix timestamp
php -r 'echo microtime(TRUE) . PHP_EOL;'
php -r 'echo microtime(TRUE) . PHP_EOL;'
</pre>
Sleep couple microseconds. Tested on {{Mac}}
<pre>
# print current unix timestamp e.g. 1598346362244
Sleep couple microseconds. Tested on {{Mac}}
<pre>
# print current unix timestamp e.g. 1598346362244
php -r 'echo microtime(TRUE) . PHP_EOL;'
# sleep 1 millisecond = 0.001 seconds
sleep 0.001s
# print current unix timestamp
php -r 'echo microtime(TRUE) . PHP_EOL;'
</pre>
Sleep couple milliseconds (1 seconds = 1000 milliseconds) e.g. 1671090194.136471987<ref>[https://apple.stackexchange.com/questions/135742/time-in-milliseconds-since-epoch-in-the-terminal macos - Time in milliseconds since epoch in the terminal - Ask Different]</ref>
<pre>
# print current unix timestamp in milliseconds e.g. 1671090194.136471987
perl -MTime::HiRes=time -e 'printf "%.9f\n", time'
# sleep 1 millisecond = 0.001 seconds
sleep 0.001s
# print current unix timestamp
perl -MTime::HiRes=time -e 'printf "%.9f\n", time'
</pre>
</pre>


Line 141: Line 177:


</pre>
</pre>
=== BASH example: download file and sleep random seconds between 1 ~ 7 seconds ===
The following script checks if a specific file exists in a defined path. If the file doesn't exist, it downloads the file from a provided URL and then pauses for a random duration between 1 and 7 seconds. If the file already exists, it simply prints a message stating that the file was found and the download was skipped.
<pre>
if [ ! -f /path/to/paper.pdf ]
then
    curl "https://website/to/pdf" -L -o /path/to/paper.pdf
    sleep $((1 + RANDOM % 7))
else
    echo "File found. Download skipped."
fi
</pre>
The same command can be written on one line:
<pre>
if [ ! -f /path/to/paper.pdf ]; then curl "https://website/to/pdf" -L -o /path/to/paper.pdf; sleep $((1 + RANDOM % 7)); else echo "File found. Download skipped."; fi
</pre>
References
* [https://www.cyberciti.biz/faq/bash-check-if-file-does-not-exist-linux-unix/ How to check if file does not exist in Bash - nixCraft]


== PHP ==
== PHP ==
Line 148: Line 207:
== JavaScript ==
== JavaScript ==
* [https://www.w3schools.com/js/js_timing.asp JavaScript Timing Events]
* [https://www.w3schools.com/js/js_timing.asp JavaScript Timing Events]
* [https://www.educative.io/edpresso/what-is-the-javascript-alternative-to-the-sleep-function What is the Javascript alternative to the sleep function?]


== References ==
== References ==
Line 157: Line 217:
* [https://en.wikipedia.org/wiki/Sleep_(system_call) Sleep (system call) - Wikipedia]
* [https://en.wikipedia.org/wiki/Sleep_(system_call) Sleep (system call) - Wikipedia]
* [https://blog.gtwang.org/windows/excel-random-number-generation-formula/ Excel 產生各種亂數的公式整理與函數教學 - G. T. Wang]
* [https://blog.gtwang.org/windows/excel-random-number-generation-formula/ Excel 產生各種亂數的公式整理與函數教學 - G. T. Wang]
* [https://blog.miniasp.com/post/2009/06/24/Sleep-command-in-Batch 如何在批次檔(Batch)中實現 sleep 命令讓任務暫停執行 n 秒 | The Will Will Web]
* [https://errerrors.blogspot.com/2024/02/implement-randbetween-using-round.html Excel 使用 RAND 函數實作 RANDBETWEEN 函數]


[[Category:Programming]] [[Category:PHP]] [[Category:MS-DOS]] [[Category:Bash]] [[Category:Tool]]
[[Category:Programming]] [[Category:PHP]] [[Category:MS-DOS]] [[Category:Bash]] [[Category:Tool]]

Latest revision as of 00:33, 21 February 2024

Sleep random seconds in programming

🌐 Switch language: EN, 漢字


MS-DOS on Windows[edit]

Approach 1: %RANDOM% + ping local[edit]

Purpose

  • Sleep random seconds between 5 ~ 60 seconds

BAT file:

REM print current date & time
ECHO %date% %time%

REM sleep 5 ~ 60 seconds
SET /a timeout=%RANDOM% * 55 / 32767 + 5
ping 127.0.0.1 -n %timeout% > nul

REM print current date & time
ECHO %date% %time%

Instruction[1]

  • %RANDOM% returns an integer between 0 and 32767[2].
  • 55 is the range of values you want: 5 to 60.
  • 32767 is the range of values returned by %RANDOM% (0 to 32767).
  • 5 is the minimum value you want. The original range of values is '0 to 55'. After plus 5 the range became '5 ~ 65'.
  • ping local address: /n <Count> "Specifies the number of echo Request messages sent. The default is 4."[3][4]

Approach 2: sleep package of CygWin[edit]

Requirement: Install Cygwin on Win Os windows.png & install sleep package (How-to: Setting Up Cygwin/X)

Verify the installation of sleep package[5][6]

  1. Key-in cmd to open command prompt (How to Open Command Prompt (Windows 10, 8, 7, Vista, XP))
  2. Key-in one of following commands
    • Key-in where sleep if you add installation path of CygWin to system path (How to setup my system path). Or
    • Key-in dir C:\cygwin64\bin\sleep.exe if the installation path of CygWin is C:\cygwin64\.
C:\Users\user>dir C:\cygwin64\bin\sleep.exe

# successful condition
C:\cygwin64\bin\sleep.exe

# failed condition
File Not Found

BAT file:

REM print current date & time
ECHO %date% %time%

REM sleep 5 ~ 60 seconds
SET /a timeout=%RANDOM% * 55 / 32767 + 5
C:\cygwin64\bin\sleep.exe %timeout%

REM print current date & time
ECHO %date% %time%

Approach 3: TIMEOUT[edit]

Alternative command: Icon_exclaim.gif The following command ECHO %date% %time% will not be executed after TIMEOUT %timeout% was executed.

BAT file:

SET /a timeout=%RANDOM% * 55 / 32767 + 5
TIMEOUT %timeout%

ECHO %date% %time%

BASH[edit]

Approach1: sleep[edit]

Tested on Linux Os linux.png & macOS icon_os_mac.png [7][8]

# print current date & time
echo $(date '+%Y-%m-%d %H:%M:%S')

# sleep 5 ~ 65 seconds
timeout=$(($RANDOM * 60 / 32768 + 5))
sleep $timeout

# print current date & time
echo $(date '+%Y-%m-%d %H:%M:%S')

Sleep couple microseconds[9]. Tested on Linux Os linux.png

# print current unix timestamp e.g. 1598346362244
date +%s%N

# sleep 1 millisecond = 0.001 seconds
sleep 0.001s

# print current unix timestamp
date +%s%N


Sleep couple microseconds. Tested on macOS icon_os_mac.png

# print current unix timestamp e.g. 1598346362244
php -r 'echo microtime(TRUE) . PHP_EOL;'

# sleep 1 millisecond = 0.001 seconds
sleep 0.001s

# print current unix timestamp
php -r 'echo microtime(TRUE) . PHP_EOL;'


Sleep couple microseconds. Tested on macOS icon_os_mac.png

# print current unix timestamp e.g. 1598346362244
Sleep couple microseconds. Tested on {{Mac}}

<pre>
# print current unix timestamp e.g. 1598346362244
php -r 'echo microtime(TRUE) . PHP_EOL;'

# sleep 1 millisecond = 0.001 seconds
sleep 0.001s

# print current unix timestamp
php -r 'echo microtime(TRUE) . PHP_EOL;'


Sleep couple milliseconds (1 seconds = 1000 milliseconds) e.g. 1671090194.136471987[10]

# print current unix timestamp in milliseconds e.g. 1671090194.136471987
perl -MTime::HiRes=time -e 'printf "%.9f\n", time'

# sleep 1 millisecond = 0.001 seconds
sleep 0.001s

# print current unix timestamp
perl -MTime::HiRes=time -e 'printf "%.9f\n", time'

Approach2: ping[edit]

Tested on Linux Os linux.png & macOS icon_os_mac.png

ping local address: -c <Count> "Stop after sending (and receiving) count ECHO_RESPONSE packets."[11]

# print current date & time
echo $(date '+%Y-%m-%d %H:%M:%S')

# sleep 5 ~ 65 seconds
timeout=$(($RANDOM * 60 / 32768 + 5))
ping 127.0.0.1 -c $timeout > nul

# print current date & time
echo $(date '+%Y-%m-%d %H:%M:%S')

Approach3: usleep[edit]

usleep(3) - Linux man page "suspend execution for microsecond intervals" (1 second = 1 000 000 microsecond). Tested on Linux Os linux.png

# print current date, time & nanoseconds
echo $(date '+%Y-%m-%d %H:%M:%S')$(date '+.%N')

# sleep 0.2 ~ 1.2 seconds
timeout=$(($RANDOM * 1000000 / 32768 + 200000))
echo $timeout
usleep $timeout

# print current date, time & nanoseconds
echo $(date '+%Y-%m-%d %H:%M:%S')$(date '+.%N')

BASH example: download file and sleep random seconds between 1 ~ 7 seconds[edit]

The following script checks if a specific file exists in a defined path. If the file doesn't exist, it downloads the file from a provided URL and then pauses for a random duration between 1 and 7 seconds. If the file already exists, it simply prints a message stating that the file was found and the download was skipped.

if [ ! -f /path/to/paper.pdf ]
then
    curl "https://website/to/pdf" -L -o /path/to/paper.pdf
    sleep $((1 + RANDOM % 7))
else
    echo "File found. Download skipped."
fi

The same command can be written on one line:

if [ ! -f /path/to/paper.pdf ]; then curl "https://website/to/pdf" -L -o /path/to/paper.pdf; sleep $((1 + RANDOM % 7)); else echo "File found. Download skipped."; fi

References

PHP[edit]

JavaScript[edit]

References[edit]

Related[edit]