Google Gears WorkerPool

WorkerPool组件也是通过google.gears.factory.create 方法来创建的:

  
InBlock.gif    var wp = google.gears.factory.create('beta.workerpool', '1.0');



他相当于线程, WorkerPool里Workers使用sendMessage() 方法来通信, 这些Workers可通过全局变量生成的子workers。

InBlock.gif        google.gears.workerPool




sendMessage() 接收两个参数:要发送的message字符串和接收message的workers的ID.

当一个worker被初始化的时候,它应该会设置一个workerPool的onmessage属性为一个方法句柄,这样的话,任何时候只要它收到消息就会调用这个方法。一旦运行,workers可以彼此发送字符串,从而触发onmessage句柄。

Workers 是被一个父类worker pool对象通过调用createWorker()方法来创建的。 createWorker() 返回一个新被创建的worker的 worker ID 。 这个方法接收一个单独的字符串参数,包括子worker应该执行的代码(请记住, javascript里可以把一个function转换为字符串,比如 String(myFunction))。
这有个例子:

   
InBlock.gif var wp = google.gears.factory.create('beta.workerpool', '1.0');
InBlock.gif        childCode = String(evalHandler) +
InBlock.gif        'google.gears.workerPool.onmessage = evalHandler;';
InBlock.gif
        wp.onmessage = parentHandler;
InBlock.gif
        var childId = wp.createWorker(childCode);
InBlock.gif        wp.sendMessage('2+2', childId);
InBlock.gif
        function parentHandler(msg, sender) {
InBlock.gif        var r = document.getElementById('result');
InBlock.gif        r.innerHTML = msg;
InBlock.gif        }
InBlock.gif
        function evalHandler( msg, sender ) {
InBlock.gif        var result = eval(msg);
InBlock.gif        google.gears.workerPool.sendMessage(String(result), sender);
InBlock.gif        }


注意,这个例子里,子worker发送result到父worker,然后父worker修改了document去显示结果,子worker不能直接操纵DOM结构,因为它是作为一个单独的“线程”来执行的,并且和“父”脚本是不能共享状态的。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值