本帖最后由 壹毛 于 2015-7-30 16:10 编辑
[aardio] 纯文本查看 复制代码 import win.ui;
/*DSG{{*/
mainForm = ..win.form(text="多线程任务分派";right=599;bottom=399)
mainForm.add(
btnPause={cls="button";text="暂停";left=134;top=9;right=242;bottom=35;z=2};
btnStart={cls="button";text="开始";left=9;top=9;right=117;bottom=35;z=1};
btnStop={cls="button";text="停止";left=259;top=9;right=367;bottom=35;z=3};
edit={cls="richedit";left=-1;top=40;right=599;bottom=399;multiline=1;vscroll=1;z=4}
)
/*}}*/
import thread.works;
import thread.command;
var listener = thread.command();
listener.print = function(...){
mainForm.edit.print(...);
}
//线程共享表
import thread.table;
var tab = thread.table("table")
tab.set("ispass", true);
io.open();
//线程多任务分派
var works = thread.works(10,
function(title){
import win;
import thread.command;
import thread.table;
var tab = thread.table("table");
for(i=1;100;1){
thread.command.print(title, "________线程运行位置【"++i++"】");
win.delay(100);
if( !tab.get("ispass") ){
thread.command.print(title, "-------------本次任务被停止---------------");
return ;
}
}
thread.command.print(title, "++++++++++本次任务完成+++++++");
}, 100
);
mainForm.btnPause.disabled = true;
mainForm.btnStop.disabled = true;
//开始任务
mainForm.btnStart.oncommand = function(id,event){
//mainForm.msgbox( mainForm.btnStart.text );
mainForm.btnStart.disabled = true;
mainForm.btnPause.disabled = false;
mainForm.btnStop.disabled = false;
[color=#000][font=Consolas,]tab.set("ispass",true);[/font][/color]
for(i=1;100;1){
if( works.queueCount() > 5 ){
mainForm.edit.print("===============等待中==============");
win.delay(100);
works.wait();
}
if( !tab.get("ispass") ){
break ;
}
mainForm.edit.print("任务派发中...");
works.push("工作线程【"++ i ++ "】");
win.delay(100);
}
works.wait();
mainForm.btnStart.disabled = false;
mainForm.btnPause.disabled = true;
mainForm.btnStop.disabled = true;
}
//暂停任务
mainForm.btnPause.oncommand = function(id,event){
//mainForm.msgbox( mainForm.btnPause.text );
if( mainForm.btnPause.text == "暂停"){
mainForm.btnPause.text = "继续";
works.suspend();
}else{
mainForm.btnPause.text = "暂停";
works.resume();
}
}
//结束任务
mainForm.btnStop.oncommand = function(id,event){
//mainForm.msgbox( mainForm.btnStop.text );
//判断线程是否暂停状态
if( mainForm.btnPause.text == "继续" ){
mainForm.btnPause.text = "暂停";
works.resume();
}
tab.set("ispass", false);
mainForm.btnStart.disabled = false;
mainForm.btnPause.disabled = true;
mainForm.btnStop.disabled = true;
}
mainForm.show();
return win.loopMessage();
重新完善了一下,改用“richedit”控件,显示正常任务分派正常。
出现一个新的问题:任务被停止后要想再开始任务,开启不起来了。是不是又要重新thread.works线程。
####问题全部解决####
|