Sleep: Difference between revisions
m (→Related) Tags: Mobile edit Mobile web edit |
|||
| (7 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 == | ||
| Line 7: | Line 9: | ||
BAT file: | BAT file: | ||
< | <syntaxhighlight lang="Windows batch files"> | ||
REM print current date & time | REM print current date & time | ||
ECHO %date% %time% | ECHO %date% %time% | ||
| Line 17: | Line 19: | ||
REM print current date & time | REM print current date & time | ||
ECHO %date% %time% | ECHO %date% %time% | ||
</ | </syntaxhighlight> | ||
Instruction<ref>[https://stackoverflow.com/questions/8258087/bat-random-timeout batch file - .bat random timeout - Stack Overflow]</ref> | Instruction<ref>[https://stackoverflow.com/questions/8258087/bat-random-timeout batch file - .bat random timeout - Stack Overflow]</ref> | ||
| Line 23: | Line 25: | ||
* 55 is the range of values you want: 5 to 60. | * 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). | * 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 | * 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> | * 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> | ||
| Line 62: | Line 64: | ||
BAT file: | BAT file: | ||
<pre> | <pre> | ||
SET /a timeout=%RANDOM% * | SET /a timeout=%RANDOM% * 55 / 32767 + 5 | ||
TIMEOUT %timeout% | TIMEOUT %timeout% | ||
| Line 175: | 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 193: | Line 218: | ||
* [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://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
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 & install sleep package (How-to: Setting Up Cygwin/X)
Verify the installation of sleep package[5][6]
- Key-in cmd to open command prompt (How to Open Command Prompt (Windows 10, 8, 7, Vista, XP))
- 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:
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 & macOS
[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
# 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
# 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
# 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]
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
# 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]
- ↑ batch file - .bat random timeout - Stack Overflow
- ↑ Random Numbers - Windows CMD - SS64.com
- ↑ time
- ↑ windows xp - How to wait in a batch script? - Stack Overflow
- ↑ How do I install cygwin components from the command line? - Stack Overflow
- ↑ SLEEP man page on Cygwin
- ↑ Perform arithmetic operations - Linux Shell Scripting Tutorial - A Beginner's handbook
- ↑ Linux Sleep Command (Pause a Bash Script) | Linuxize
- ↑ How do I get the current Unix time in milliseconds in Bash? - Server Fault
- ↑ macos - Time in milliseconds since epoch in the terminal - Ask Different
- ↑ ping(8) - Linux man page