搜索
查看: 2843|回复: 5

也请教一个不定数works任务分派的问题

[复制链接]

9

主题

18

帖子

146

积分

一级会员

Rank: 2

积分
146
发表于 2013-12-8 15:29:25 | 显示全部楼层 |阅读模式

  1. //多线程任务分派
  2. import thread.works;

  3. io.open()
  4. var works = thread.works( 20,
  5.         function(id) {
  6.                 thread.lock("写控制台")
  7.                 io.print("线程ID" + thread.getId(),",开始工作,接收到任务指令参数",id)
  8.                 if(id>150){
  9.                         thread.set("标志键",'t' )
  10.                 }
  11.                 thread.unlock("写控制台")
  12.                
  13.                 return "返回值,线程ID" + thread.getId();
  14.         }
  15. );
  16. var i=1;
  17. thread.set("标志键",'b' )
  18. while(thread.get("标志键")!='t'){
  19.         //分派任务
  20.         works.push(i);
  21.         i++;
  22. }
  23. //等待任务完成
  24. works.waitClose(
  25.         function(r){
  26.                 io.print( "检查成果", r  )
  27.         }
  28. )
  29.    
  30. io.print("OK")
复制代码

请问怎样按照 id超过150自动停止分派呢
回复

使用道具 举报

9

主题

18

帖子

146

积分

一级会员

Rank: 2

积分
146
 楼主| 发表于 2013-12-8 15:30:22 | 显示全部楼层

现在这个代码根本停不下来

现在这个代码根本停不下来
回复

使用道具 举报

1

主题

7

帖子

94

积分

一级会员

Rank: 2

积分
94
发表于 2013-12-8 16:33:45 | 显示全部楼层

范列中有 while( tab.count()>300 ){ //限制个数 io.print("填充 300个ID 完毕

范列中有
while( tab.count()>300  ){ //限制个数
                        io.print("填充 300个ID 完毕,在等待消除ID。。。。")
                        if( !win.delay(1000) )
                                    return;
                    }
回复

使用道具 举报

1

主题

4

帖子

72

积分

一级会员

Rank: 2

积分
72
发表于 2013-12-8 17:09:26 | 显示全部楼层

你也可以在主线程上做限制 [code][lang=aardio,false]//多线程任务分派 import thread.works; io.op

你也可以在主线程上做限制
  1. //多线程任务分派
  2. import thread.works;

  3. io.open()
  4. var works = thread.works( 20,
  5.     function(id) {
  6.         thread.lock("写控制台")
  7.         io.print("线程ID" + thread.getId(),",开始工作,接收到任务指令参数",id)
  8.         thread.unlock("写控制台")
  9.          
  10.         return "返回值,线程ID" + thread.getId();
  11.     }
  12. );
  13. var i=1;
  14. while(i <= 150){
  15.     //分派任务
  16.     works.push(i);
  17.     i++;
  18. }

  19. //等待任务完成
  20. works.waitClose(
  21.     function(r){
  22.         io.print( "检查成果", r  )
  23.     }
  24. )
  25.    
  26. io.print("OK")
复制代码
回复

使用道具 举报

9

主题

18

帖子

146

积分

一级会员

Rank: 2

积分
146
 楼主| 发表于 2013-12-8 17:12:43 | 显示全部楼层

嘿说了是 不定数目的 i初始是1 结束未知 只有根据在函数中判断是否达到某个条件,达到就全部停止.没有达到就继续

嘿说了是 不定数目的

i初始是1  结束未知
只有根据在函数中判断是否达到某个条件,达到就全部停止.没有达到就继续
回复

使用道具 举报

9

主题

462

帖子

2551

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2551
发表于 2013-12-8 18:11:40 | 显示全部楼层

你没有讲到你问题的点子上,你的目的是在工作线程里检测条件,然后发信号给主线程。 即然主线程不知道是不是150,那他也没必要去知道,他只要接收停止信号就行了,这

你没有讲到你问题的点子上,你的目的是在工作线程里检测条件,然后发信号给主线程。
即然主线程不知道是不是150,那他也没必要去知道,他只要接收停止信号就行了,这就好像过红绿灯,一个普通的行人要去统计马路的流量每份钟是150、250有什么用呢? 见红灯就停,见绿灯就行就可以了。

不要执着于用一个 thread.works 解决所有问题, 不是拿了一把锤子就可以敲遍所有的钉子。
线程消息、thread.command、thread.event ..... 都可以方便的实现线程间的交互控制。去看看范例,例如线程范例里的线程定时器,注意看里面控制其他线程停止的这句: event.set(); 切换信号

评分

参与人数 1银币 +1 收起 理由
清顽于世 + 1 赞一个!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-12-15 16:48 , Processed in 0.062500 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表