3. sleep のない言語 JavaScriptどうやって実現するか?function sleep(msec) { // CPU_100% var t = (new Date()).getTime()-(-msec); while ( (new Date()).getTime() < t ) {} }function sleep(msec) { // LiveConnect Packages.java.lang.Thread.sleep(msec); }
4. クロスブラウザで sleep を実現(無理矢理)function sleep(msec) { try { // for IEwindow.showModalDialog( "javascript:document.write('<script>" + "window.setTimeout(function(){window.close()}," + msec + ");<"script>');"); } catch (e) { try { // for Firefox, Opera with LiveConnectPackages.java.lang.Thread.sleep(msec); } catch (e) { // for Safari and others var limit = (new Date()).getTime() - (-msec); while ((new Date()).getTime() < limit) {} } } }
5. 1秒ごとに表示したい(よくある間違い)<script>function sleep(msec) {var t = (new Date()).getTime() - (-msec); while ( (new Date()).getTime() < t );}function init() {var body = document.body; sleep(1000);body.innerHTML += "<h1>Hello!</h1>"; sleep(1000);body.innerHTML += "<h2>Hello?</h2>"; sleep(1000);body.innerHTML += "<h3>Hello!?</h3>";};</script><body onload="init()"></body>
30. HTML5 Web Workers APImain.htmlworker.js(1) var worker = new Worker(“worker.js”);ワーカースレッドの作成(2) worker.postMessage(”hello”);(3) onmessage = function(e) {var result = e.data + ”!”;(4) postMessage(result);(5) worker.onmessage = function(e) { // DOM 更新処理window.alert(e.data);
31. ワーカスレッドを呼び出す UIスレッドworker.html<title>HTML5 Web Workers</title><script>var worker = new Worker("worker.js");worker.onmessage = function(e){document.body.innerHTML += e.data;}worker.postMessage("hello");</script>
32. ワーカスレッドの定義(重たい処理を分離)worker.jsfunction sleep(msec) {var t = (new Date()).getTime() - (-msec); while ( (new Date()).getTime() < t );}//↓ワーカ側でメッセージを受信したときの処理onmessage = function(e) { sleep(1000);postMessage("<h1>" + e.data + "!</h1>");}