Hang的笔记簿

  • 关于
杂记
记录我在传音的日子
  1. 首页
  2. AARDIO
  3. 正文

aardio-读写Excel学习记录

2020年12月02日 149点热度 0人点赞 2条评论

多个相同格式的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的多线程管理

bbs.aardio.com线程管理器示例

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数据由主线程来决定如何处理。

多线程读取excel文件

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();

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2020年12月07日

Hang

点赞
< 上一篇
下一篇 >

文章评论

  • 极地

    我最近也在看关于多线程的管理,学习学习

    2020年12月04日
    回复
    • Hang

      @极地 多线程在有些场景应用,能提高不少效率。

      2020年12月07日
      回复
  • 取消回复

    COPYRIGHT © 2020 TRANSSION LIFE. ALL RIGHTS RESERVED.

    THEME KRATOS MADE BY VTROIS