node.jsでsleepする方法
提供: Node.js/JavaScript入門
スポンサーリンク
node.jsでsleepするには、sleepモジュールで提供されるsleepやusleepを使用します。
読み方
- sleep
- すりーぷ
概要
C言語などでプログラムを一時的に寝かす方法として、sleep()やusleep()を使用します。 sleepモジュールは、同様の機能を提供してくれます。
インストール
sleepモジュールをインストールします。
$ sudo node install -g sleep
g++コマンドが存在しない環境では、CXXでC++コンパイラを指定してください。
$ sudo env CXX=c++ npm install -g sleep
ソースコード
3秒スリープする例です。
var sleep = require('sleep'); sleep.sleep(3); // 3秒スリープします。
3マイクロ秒スリープするには、usleepを使用します。 1秒は、1,000,000 マイクロセコンドです。
var sleep = require('sleep'); sleep.usleep(3); // 3マイクロ秒スリープします。
実行例
$ node sleep.js
使い方
エラー
インストール時のエラー
npmは、インストール時にC++のソースコードをビルドしようとします。そのときに、g++コマンドを使おうとします。FreeBSD 10.0-RELEASEでは、g++コマンドがありません。代わりに、c++コマンド(実体はclang++)やclang++コマンドがあります。
$ sudo npm install -g sleep \ > sleep@1.1.8 install /usr/local/lib/node_modules/sleep > node build.js || nodejs build.js gyp WARN EACCES user "root" does not have permission to access the dev dir "/roo t/.node-gyp/0.10.33" gyp WARN EACCES attempting to reinstall using temporary dev dir "/usr/local/lib/ node_modules/sleep/.node-gyp" gmake: ディレクトリ '/usr/local/lib/node_modules/sleep/build' に入ります CXX(target) Release/obj.target/node_sleep/sleep.o gmake: g++: コマンドが見つかりませんでした node_sleep.target.mk:81: ターゲット 'Release/obj.target/node_sleep/sleep.o' のレシピで失敗しました gmake: *** [Release/obj.target/node_sleep/sleep.o] エラー 127 gmake: ディレクトリ '/usr/local/lib/node_modules/sleep/build' から出ます gyp ERR! build error gyp ERR! stack Error: `gmake` failed with exit code: 2 gyp ERR! stack at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:267:23) gyp ERR! stack at ChildProcess.emit (events.js:98:17) gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:810:12) gyp ERR! System FreeBSD 10.0-RELEASE-p7 gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--global" "sleep" gyp ERR! cwd /usr/local/lib/node_modules/sleep gyp ERR! node -v v0.10.33 gyp ERR! node-gyp -v v1.0.2 gyp ERR! not ok [sleep]: Error: Failed to execute 'node-gyp rebuild --global sleep' (1) nodejs: not found npm ERR! FreeBSD 10.0-RELEASE-p7 npm ERR! argv "node" "/usr/local/bin/npm" "install" "-g" "sleep" npm ERR! node v0.10.33 npm ERR! npm v2.0.2 npm ERR! code ELIFECYCLE npm ERR! sleep@1.1.8 install: `node build.js || nodejs build.js` npm ERR! Exit status 127 npm ERR! npm ERR! Failed at the sleep@1.1.8 install script. npm ERR! This is most likely a problem with the sleep package, npm ERR! not with npm itself. npm ERR! Tell the author that this fails on your system: npm ERR! node build.js || nodejs build.js npm ERR! You can get their info via: npm ERR! npm owner ls sleep npm ERR! There is likely additional logging output above.
g++コマンドのない環境のエラーです。環境変数でC++コンパイラのコマンドを指定します。 g++以外のC++コンパイラがすでにある場合は、環境変数 CXX でC++コンパイラのコマンドを指定します。または、g++のパッケージをインストールします。
$ sudo env CXX=c++ npm install -g sleep パスワード: | > sleep@1.1.8 install /usr/local/lib/node_modules/sleep > node build.js || nodejs build.js gyp WARN EACCES user "root" does not have permission to access the dev dir "/root/.node-gyp/0.10.33" gyp WARN EACCES attempting to reinstall using temporary dev dir "/usr/local/lib/node_modules/sleep/.node-gyp" gmake: ディレクトリ '/usr/local/lib/node_modules/sleep/build' に入ります CXX(target) Release/obj.target/node_sleep/sleep.o SOLINK_MODULE(target) Release/obj.target/node_sleep.node COPY Release/node_sleep.node gmake: ディレクトリ '/usr/local/lib/node_modules/sleep/build' から出ます [sleep]: Created: Build/Release [sleep]: Installed in Build/Release/node_sleep.node sleep@1.1.8 /usr/local/lib/node_modules/sleep └── mkdirp@0.3.5
ビルド時のエラー
mkdirp がないとエラーになりました。
$ node build.js module.js:340 throw err; ^ Error: Cannot find module 'mkdirp' at Function.Module._resolveFilename (module.js:338:15) at Function.Module._load (module.js:280:25) at Module.require (module.js:364:17) at require (module.js:380:17) at Object.<anonymous> (/tmp/node/node-sleep/build.js:8:14) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10)
mkdirp を入れます。
$ sudo npm install -g mkdirp
node-gyp が入っていないようです。
$ node build.js [sleep]: Error: Failed to execute 'node-gyp rebuild' (Error: spawn ENOENT)
node-gyp を入れます。
$ sudo npm install -g node-gyp
g++コマンドがないので失敗しました。
$ node build.js gyp info it worked if it ends with ok gyp info using node-gyp@1.0.2 gyp info using node@0.10.33 | freebsd | x64 gyp http GET http://nodejs.org/dist/v0.10.33/node-v0.10.33.tar.gz gyp http 200 http://nodejs.org/dist/v0.10.33/node-v0.10.33.tar.gz gyp http GET http://nodejs.org/dist/v0.10.33/SHASUMS256.txt gyp http 200 http://nodejs.org/dist/v0.10.33/SHASUMS256.txt gyp info spawn python gyp info spawn args [ '/usr/local/lib/node_modules/node-gyp/gyp/gyp_main.py', gyp info spawn args 'binding.gyp', gyp info spawn args '-f', gyp info spawn args 'make', gyp info spawn args '-I', gyp info spawn args '/tmp/node/node-sleep/build/config.gypi', gyp info spawn args '-I', gyp info spawn args '/usr/local/lib/node_modules/node-gyp/addon.gypi', gyp info spawn args '-I', gyp info spawn args '/tmp/.node-gyp/0.10.33/common.gypi', gyp info spawn args '-Dlibrary=shared_library', gyp info spawn args '-Dvisibility=default', gyp info spawn args '-Dnode_root_dir=/tmp/.node-gyp/0.10.33', gyp info spawn args '-Dmodule_root_dir=/tmp/node/node-sleep', gyp info spawn args '--depth=.', gyp info spawn args '--no-parallel', gyp info spawn args '--generator-output', gyp info spawn args 'build', gyp info spawn args '-Goutput_dir=.' ] gyp info spawn gmake gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ] gmake: ディレクトリ '/tmp/node/node-sleep/build' に入ります CXX(target) Release/obj.target/node_sleep/sleep.o gmake: g++: コマンドが見つかりませんでした node_sleep.target.mk:81: ターゲット 'Release/obj.target/node_sleep/sleep.o' のレシピで失敗しました gmake: *** [Release/obj.target/node_sleep/sleep.o] エラー 127 gmake: ディレクトリ '/tmp/node/node-sleep/build' から出ます gyp ERR! build error gyp ERR! stack Error: `gmake` failed with exit code: 2 gyp ERR! stack at ChildProcess.onExit (/usr/local/lib/node_modules/node-gyp/lib/build.js:267:23) gyp ERR! stack at ChildProcess.emit (events.js:98:17) gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:810:12) gyp ERR! System FreeBSD 10.0-RELEASE-p7 gyp ERR! command "node" "/usr/local/bin/node-gyp" "rebuild" gyp ERR! cwd /tmp/node/node-sleep gyp ERR! node -v v0.10.33 gyp ERR! node-gyp -v v1.0.2 gyp ERR! not ok [sleep]: Error: Failed to execute 'node-gyp rebuild' (1)
FreeBSD 10.0-RELEASEには、g++コマンドがないので、エラーになりました。 make に C++コンパイラを指定してやればいいだけなので、環境変数でこの問題は解決できます。
$ env CXX=c++ node build.js gyp info it worked if it ends with ok gyp info using node-gyp@1.0.2 gyp info using node@0.10.33 | freebsd | x64 gyp info spawn python gyp info spawn args [ '/usr/local/lib/node_modules/node-gyp/gyp/gyp_main.py', gyp info spawn args 'binding.gyp', gyp info spawn args '-f', gyp info spawn args 'make', gyp info spawn args '-I', gyp info spawn args '/tmp/node/node-sleep/build/config.gypi', gyp info spawn args '-I', gyp info spawn args '/usr/local/lib/node_modules/node-gyp/addon.gypi', gyp info spawn args '-I', gyp info spawn args '/tmp/.node-gyp/0.10.33/common.gypi', gyp info spawn args '-Dlibrary=shared_library', gyp info spawn args '-Dvisibility=default', gyp info spawn args '-Dnode_root_dir=/tmp/.node-gyp/0.10.33', gyp info spawn args '-Dmodule_root_dir=/tmp/node/node-sleep', gyp info spawn args '--depth=.', gyp info spawn args '--no-parallel', gyp info spawn args '--generator-output', gyp info spawn args 'build', gyp info spawn args '-Goutput_dir=.' ] gyp info spawn gmake gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ] gmake: ディレクトリ '/tmp/node/node-sleep/build' に入ります CXX(target) Release/obj.target/node_sleep/sleep.o SOLINK_MODULE(target) Release/obj.target/node_sleep.node COPY Release/node_sleep.node gmake: ディレクトリ '/tmp/node/node-sleep/build' から出ます gyp info ok [sleep]: Created: Build/Release [sleep]: Installed in Build/Release/node_sleep.node
関連項目
ツイート
スポンサーリンク