搜索
  • TA的每日心情
    郁闷…
    2020-12-25 12:59
  • 签到天数: 157 天

    [LV.7]社区八爷

    发表于 2020-3-25 10:16:06 133 浏览 6 回复

    《易语言》多线程的介绍、使用及注意事项

    多数情况下,想要实现一个软件高性能并且复杂的功能,难免要使用多线程来解决。




    什么叫多线程?
    正常情况下,软件默认都是单线程的,也就是说按照一条路走到黑,但是有些情况下,我们需要让软件异步执行多个事件,
    这种情况下,就很可能需要使用“多线程”来解决开发需求。

    简单来说,多线程就是异步执行多个不同的事情。




    多线程的用法?
    多线程与易语言的“子程序”调用方式相似,但要使用“启动线程()”与子程序指针的方式,来调用某个想要线程执行子程序。

    1. 启动线程 (&下载子程序, , )
    复制代码






    多线程的结束?
    1. .版本 2
    2. .支持库 EThread

    3. 强制结束线程 ()
    4. 关闭线程句柄 ()
    复制代码
    在建议的编程规范中,如果使用多线程,在确保线程运行完毕后,一定要使用此代码结束线程,避免浪费系统资源。




    多线程通行证的用法?
    在多线程编写使用过程中,如果牵扯到读写或修改窗口组件的行为,这种情况下如果只是单纯的调用线程,很容易引起程序的崩溃。
    所以你需要为不安全的代码,建立一层保护措施,在易语言中,这个名词叫做“通行证”。

    1. .版本 2
    2. .支持库 EThread

    3. 创建进入许可证 ()
    4. 进入许可区 ()
    5. 退出许可区 ()
    6. 删除进入许可证 ()
    复制代码

    这四个代码就是许可证的核心内容,通常你也需要按照这样的顺序来执行。
    1.先使用创建进入许可证(),返回一个整数型许可证句柄,到任意整数型变量;
    2.在线程子程序中,牵扯到敏感操作(如读写组件等)之前,调用进入许可区(许可证句柄);
    3.在线程子程序中,敏感操作执行完毕后,调用退出许可区(许可证句柄);
    4.在线程完全运行完毕后,或程序将被销毁时,严谨起见,删除进入许可证(许可证句柄)。

    以上的代码可以简单理解为,创建许可证是为了创建一个唯一的“通行证”。
    在执行危险代码前,告诉系统这个“通行证”要开始使用了,在通行证期间的代码要一个一个执行,而不要同时执行,以保护代码逻辑正确。
    执行危险代码后,退出许可区,告诉这个“通行证”暂时用完了,下面的代码就可以按多线程逻辑异步执行了。
    当你完全用完许可证后(如:程序即将结束、不会再用这方面的线程时),你需要删除进入许可证,并且这个许可证彻底失效,如果想要再使用必须重新执行完整步骤。




    多线程注意事项?
    这是一个关键的问题。
    多线程的确可以提升软件的执行效率,也可以更严谨快速的执行相关的代码,但是一定要注意以下事项:
    1.每个成功启动的线程就算【1个线程数】,具体程序能运行多少线程与电脑配置是相关的,但通常情况下,建议同时线程不要超过200;
    2.如果不严谨写出的线程命令,对软件来说是极不安全的,它可能会让系统无法判定“先来后到”,从而造成软件的崩溃(易语言很常见),所以一定要避免在线程内操作UI组件,这有很大几率会造成软件的崩溃,如果一定要操作(如读写等),就要使用线程许可证来解决,并且一定要严谨的编写代码;
    3.在复杂的程序下,一个线程可能需要2~3个或更多许可证来限制,因为可能只要有一环危险代码没有限制,其他的限制都是徒劳无功的;
    4.在模块、dll等情况下,无法使用线程(但可以创建一个窗口,再进行使用);
    5.线程启动后没办法很方便的确定是否运行完毕,以及无法直接获取返回值,但可以通过延迟等待(或检测等待)的方法检测。





    本文原创发布:两点半俱乐部社区(www.230club.com
    转载请注明原地址。

    两点半社区 @ 230club.com
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2020-12-9 13:07
  • 签到天数: 153 天

    [LV.7]社区八爷

    发表于 2020-3-25 10:26:32
    学到了awa,那么请问为什么不能设置先来后到的一种形式awa
    FBI open teh door!我的discord
    突突突
    回复

    使用道具 举报

  • TA的每日心情
    郁闷…
    2020-12-25 12:59
  • 签到天数: 157 天

    [LV.7]社区八爷

     楼主| 发表于 2020-3-25 10:32:51
    Sword 发表于 2020-3-25 10:26
    学到了awa,那么请问为什么不能设置先来后到的一种形式awa

    所以要用多线程许可证
    两点半社区 @ 230club.com
    回复

    使用道具 举报

  • TA的每日心情
    疑惑
    2020-4-12 20:54
  • 签到天数: 15 天

    [LV.4]预备大佬

    发表于 2020-3-25 12:52:27
    好难
    两点半社区 @ 230club.com
    回复

    使用道具 举报

  • TA的每日心情
    疑惑
    2020-4-12 20:54
  • 签到天数: 15 天

    [LV.4]预备大佬

    发表于 2020-3-25 12:53:03
    ?图片怎么这么大
    两点半社区 @ 230club.com
    回复

    使用道具 举报

  • TA的每日心情
    疑惑
    2020-4-12 20:54
  • 签到天数: 15 天

    [LV.4]预备大佬

    发表于 2020-3-25 12:53:37
    233333
    两点半社区 @ 230club.com
    回复

    使用道具 举报

  • TA的每日心情
    郁闷…
    2020-12-25 12:59
  • 签到天数: 157 天

    [LV.7]社区八爷

     楼主| 发表于 2020-3-25 19:50:29
    两点半社区 @ 230club.com
    回复

    使用道具 举报

    返回列表
    您需要登录后才可以回帖 登录 | 加入社区

    本版积分规则

    登录或注册到社区吧!

    运营团伙

    幻想乐趣工作室

    官方QQ群

    37880111(做饭+女装交流)

    扫一扫快速加入

    群号652692981

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