From d628147bca6bbfd879ad2d5b60417c83683bf685 Mon Sep 17 00:00:00 2001 From: Joel Martin Date: Sat, 10 Apr 2010 15:52:27 -0400 Subject: [PATCH] WebWorkers example with two way messages. - Prime number background worker that can be started, stopped and reset that calculates prime numbers and sends them back to the main page/thread. --- prime.html | 40 ++++++++++++++++++++++++++++++++++++++++ prime.js | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 prime.html create mode 100644 prime.js diff --git a/prime.html b/prime.html new file mode 100644 index 00000000..0eed4a81 --- /dev/null +++ b/prime.html @@ -0,0 +1,40 @@ + + + + Worker example: One-core computation + + +

The highest prime number discovered so far is:

+ + + +
+ Log:
+ + + + + + diff --git a/prime.js b/prime.js new file mode 100644 index 00000000..1b43d71d --- /dev/null +++ b/prime.js @@ -0,0 +1,39 @@ +var n = 1; +var cur = 1; +var timer = null; + +function search() { + if (timer) clearTimeout(timer); + var sqrtn = Math.sqrt(n); + for (iters = 0; iters < 10000; iters += 1) { + cur += 1; + if ((cur <= sqrtn) && (n % cur != 0)) continue; + if (cur > sqrtn) { + postMessage("num:" + n); + } + n += 1; + cur = 1; + } + timer = setTimeout(search, 10); +} + + +onmessage = function (e) { + switch (e.data) { + case 'start': + postMessage("log:start"); + if (timer) clearTimeout(timer); + timer = setTimeout(search, 100); + break; + case 'stop': + postMessage("log:stop"); + if (timer) clearTimeout(timer); + started = false; + break; + case 'reset': + postMessage("log:reset"); + n = 1; + postMessage('num:'); + break; + } +}