多个相同格式的Excel文档合并
假设有n个待合并文件,分别由n个线程同步进行读取其中的内容,然后依次写入同一个指定文件内。
线程同步读取:使用thread.manage创建n个线程
依次写入同一个指定文件内:?暂时没有想法,先睡觉,明早要跑步。使用thread.set将线程中的数据传递给主线程,由主线程来将完成数据的写入
2020/12/03 09:03更新想法:使用win.invoke创建一个线程,在这个线程内使用thread.manage创建n个线程去执行读取,thread.manage线程全部结束后,win.invoke执行完毕并返回参数,让主线程开始写入的操作。
学习多线程的第一天,总结如下:
thread.manage 线程管理器可以同步执行
win.invoke 会等待线程执行完毕,并将返回值返回给调用线程
thread.set("标志键", 99) 线程共享变量
ps:通过传递窗体句柄,来实现线程与主程序界面的数据交互
下面这份代码是在bbs上看到的,基于它学习aardio的多线程管理
import win.ui;
import thread.manage;
/*DSG{{*/
var winform = win.form(parent=...; text="aardio Form";right=349;bottom=249 )
winform.add(
static2={ transparent=1;bottom=226;right=248;left=205;top=207;font=LOGFONT( name="宋体";h=-12 );z=4;text="B";cls="static" };
static={ transparent=1;bottom=227;right=111;left=68;top=208;font=LOGFONT( name="宋体";h=-12 );z=3;text="A";cls="static" };
edit2={ bottom=189;right=271;left=174;multiline=1;top=35;font=LOGFONT( name="宋体";h=-12 );z=2;text="";edge=1;cls="edit" };
edit={ bottom=191;right=136;left=39;multiline=1;top=37;font=LOGFONT( name="宋体";h=-12 );z=1;text="";edge=1;cls="edit" }
)
/*}}*/
manage=thread.manage()//创建线程管理器
//线程函数要独立封包,参数传递控件句柄
计数=function(hwnd,sl=1000){
import win.ui
edit=win.ui.ctrl.edit()
edit.hwnd=hwnd
for(i=1;10;1){
sleep(sl)
edit.text=i
}
}
winform.show()
manage.create(计数,winform.edit.hwnd)
manage.create(计数,winform.edit2.hwnd,500)
manage.waitClose()
win.loopMessage();
琢磨了一天,得到了想要的东西
感谢“aardio编程”群——“光庆”大佬的帮助~
感谢“aardio编程”群——“光庆”大佬的帮助~
感谢“aardio编程”群——“光庆”大佬的帮助~
使用线程管理来创建多个线程同步工作,创建新线程时要传一个参数给它,作为该线程的唯一标识(后面方便统计数据),每个线程在结束时都会把处理的数据传递给主线程设置的变量内(一个table变量),线程的唯一标识作为table的键,线程处理的数据作为值,最终table数据由主线程来决定如何处理。
import thread.manage
var results_summary={}
import console
manage = thread.manage(3)
import thread.command
a = thread.command(winform)
a.passedToMain=function(i,v){
results_summary[i] = v
}
var thrdFunc = function(n){
for(i=1;10;1){
import thread.command;
thread.command.passedToMain(n,i)
}
}
manage.create(thrdFunc,1)
manage.create(thrdFunc,2)
manage.create(thrdFunc,3)
manage.create(thrdFunc,4)
manage.waitClose()
console.dump(results_summary)
console.pause();
文章评论
我最近也在看关于多线程的管理,学习学习
@极地 多线程在有些场景应用,能提高不少效率。