Pot.js Workeroid.terminate() Test (Web Workers)

Pot.js Workeroid.terminate() Test (Web Workers)

by polygonplanet

HTML

<a href="http://polygonplanet.github.com/Pot.js/#reference.Pot.Workeroid.methods" target="_blank" title="Pot.js + PotLite.js - Document and Reference - JavaScript Async + String Utility Library">Pot.Workeroid Reference</a>
<hr>
<button id="execute" type="button">execute</button>
<button id="stop" type="button">stop</button>
<div id="result"></div>

CSS

button {
  margin-left: 1em;
}

#result {
  margin: 1em;
}

JavaScript

var url = 'http://api.polygonpla.net/js/pot/1.17/pot.min.js';

$.getScript(url).then(function() {
  var worker;

  function doit() {
    worker = new Pot.Workeroid(function(data) {
        //
        // このスコープの中が 子 Worker スレッド
        //
        var n = 1;
        Pot.Deferred.forEver.slow(function() {
            n += 1;
            for (var i = 2; i <= Math.sqrt(n); i += 1) {
                if (n % i == 0) {
                    return;
                }
            }
            // 素数をポスト
            postMessage(n);
        });
    });
    // メッセージを受信した時
    worker.onmessage = function(data, event) {
        $('#result').text(data);
    };
    // Worker を開始
    worker.postMessage();
  }
  
  $('#execute').click(function() {
    $(this).attr({disabled : true});
    doit();
  });
  $('#stop').click(function() {
    worker.terminate();
  });
});