搜索
aardio官方社区 门户 查看主题

thread.works问题,不执行

发布者: znkee | 发布时间: 2015-11-10 14:40| 查看数: 2348| 评论数: 4|帖子模式

参考thread.works示例,我在winform中使用遇到如下问题,见代码

  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = ..win.form(text="aardio form";right=599;bottom=399)
  4. winform.add(
  5. button={cls="button";text="button";left=256;top=186;right=377;bottom=256;z=1}
  6. )
  7. /*}}*/



  8. import thread.works;

  9. io.open()
  10. var works = thread.works( 20,
  11.         function(tab) {
  12.                 thread.lock("写控制台")
  13.                 io.print("线程ID" + thread.getId(),",开始工作,接收到任务指令参数",tab.a)
  14.                 thread.unlock("写控制台")
  15.                
  16.                 return "返回值,线程ID" + thread.getId();
  17.         }
  18. );

  19. winform.button.wndproc = function(hwnd,message,wParam,lParam){
  20.     if (message == 0x202/*_WM_CHAR*/) {
  21.       [color=Red]win.msgbox(1)
  22.         var tab={};
  23.         tab.a="aaa";
  24.         //分派任务
  25.         works.push(tab)[/color]
  26.         //如果把works.push放在这里,msgbox已经触发,但是控制台不会输出任何东西,works.queueCount() 会增加,但是就是不处理
  27.         
  28.     }
  29. }

  30. [color=DarkGreen]/*
  31. var tab={};
  32. tab.a="aaa";
  33. //分派任务
  34. works.push(tab)
  35. */[/color]
  36. //如果把分派任务放这里可以顺利执行

  37. winform.button.oncommand = function(id,event){
  38.         //winform.msgbox( winform.button.text );
  39.        
  40.        
  41. }


  42. //等待任务完成
  43. works.waitClose(
  44.         function(r){
  45.                 io.print( "检查成果", r  )
  46.         }
  47. )


  48. winform.show()
  49. win.loopMessage();

复制代码


问题如上,不知道是不是我哪点用错了?还是thread.works问题?

最新评论

znkee 发表于 2015-11-10 14:43:20

额 本来问题部分已经用红色标注, 主要是这部分 var tab={}; tab.a="aaa"; works.push(tab) 如果放到按钮

额  本来问题部分已经用红色标注,
主要是这部分
var tab={};
tab.a="aaa";
works.push(tab)

如果放到按钮事件里面就没反应,不懂
znkee 发表于 2015-11-10 14:46:15

不用回答了。。。已经找到解决

不用回答了。。。已经找到解决
auaau 发表于 2015-11-10 15:20:03

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=70272&ptid=13112][c

znkee 发表于 2015-11-10 14:46
不用回答了。。。已经找到解决

提问请加上基本的礼貌用语,例如“请问”,“请教”,“麻烦...帮我看一下”,
问题解决了,请留下解决方案,以尽可能的去帮助其他人:
//等待任务完成
works.waitClose()
你在这句代码前面 works.push(任务) 添加任务是可以执行的,你在这句代码后面、点击按钮的时候再去  works.push(任务) 是不可以执行的。


因为你已经 works.waitClose() 关闭所有线程了。
close 就是关闭的意思,注意看函数说明,解决方案就是去掉 works.waitClose() 或者把他放到 win.loopMessage(); 后面。
znkee 发表于 2015-11-18 10:24:01

谢谢您的回答,知道提问规则了,谢谢

谢谢您的回答,知道提问规则了,谢谢

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

GMT+8, 2017-11-23 20:52 , Processed in 0.093750 second(s), 18 queries , WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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