开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 48632|回复: 65
收起左侧

[分享] 【转载】-浅谈易语言多线程

[复制链接]

结帖率:100% (27/27)
发表于 2014-8-10 21:37:35 | 显示全部楼层 |阅读模式   河南省濮阳市
线程-即一个独立运行的子程序,就叫做线程

多线程是程序员们经常会使用到的,多线程非常高效是不可否认的,我们还可以把一些占用时间长的子程序交给线程执行(后台处理)
,在特别的地方使用线程去处理还能节省系统资源  等。
多线程是这样实现这里就不说了,下面我们主要讲解     线程句柄  许可证(临界区)  互斥量  信号量控制线程数量   原子操作  及  使用多线程的主要事项

  • 线程句柄: 控制线程暂停或强制结束需要用到,关闭线程句柄并不会影响线程执行,所以个人认为线程句柄若无用咋可关闭。
    CloseHandle()关闭一个内核对象

  • 许可证:每个进程中访问临界资源的那段代码称为临界区(许可证也称作临界区)。当某个线程进入临界区内的时候,若其他的某个线程需要访问那段资源,那么就会被排斥,不允许进入,要等到那个已经进入的线程退出临界区后,它才能进入访问,通常用作多线程中访问共享资源时的加锁,避免多线程冲突导致程序崩溃。
    EnterCriticalSection() 进入临界区
    LeaveCriticalSection() 离开临界区

  • 互斥量:互斥量和许可证很相似,许可证只能在自我进程中互斥,而互斥量则可以跨进程互斥,也有人使用这个做禁止重复运行,但这很容易被破J,因为只要人家关闭了那个互斥量就OK.。
    CreateMutex() 创建一个互斥量
    OpenMutex() 打开一个互斥量
    ReleaseMutex() 释放互斥量
    WaitForMultipleObjects() 等待互斥量对象

  • 信号量控制线程数量:这里我用最通俗的话来讲解怎么用信号量控制线程数量,信号量首先我们可以把他当做一个容器,那么我们给他指定的多少个空间(线程数),当我们启动一个线程(给信号量资源数减一),那个空间就让他少一个,我们结束一个线程那个空间就多一个(给信号量资源数加一),当空间全部没有了的话,我们此时是在给信号量资源数减一的代码处,那么它就不会减,因为没有空间了,在这时他就会阻塞在那个代码处,等待到有空间能减一时,就自动通过并减一,如此循环那么线程数始终不会超过我们设定的最大线程数——信号量的这个解释只适用于控制线程数,其实信号量并不完全是这样(详细自己百度)。
           CreateSemaphore() 创建一个信号量
         OpenSemaphore() 打开一个信号量
         ReleaseSemaphore() 释放信号量
         WaitForSingleObject() 等待信号量

  • 原子操作:原子操作与普通的整数型操作的区别是  普通的整数型操作,多线程中多个线程同时访问或操作一个共享的整数型资源时,会有可能发生多个线程同时访问一个资源而造成冲突的状况,而原子操作不同,原子操作整数型资源时它会禁止别的线程访问这个资源,等待到操作完毕后则可以让别的线程访问,并且操作时不会被任何其他任务或事件所中断,也有人说这里为什么不使用临界区呢,使用临界区也是可以的,但相对来说,原子操作的速度是比临界区快一些的 等.....  
    InterlockedExchangeAdd()  原子性相加
    InterlockedIncrement() 原子性自增(+1)
    InterlockedDecrement() 原子性自减(-1)
    InterlockedExchange() 原子性交换
  • 易语言多线程的注意事项:
    6.1:避免少操作外部可视化组件或进入许可证后操作,
    6.2:常识,操作共享资源时需要加锁,
    6.3:尽量避免使用 编码转换 配置项操作 这种命令,要使用也最好进入临界区后使用,
    6.4:灵活使用易语言的自定义数据类型,当有多个共享资源时,可以换成用自定义数据类型,
    6.5:少使用别人的模块,别人的模块中有什么代码都不知道,有的可能会有某些代码会影响到线程的稳定运行,
    6.6:多核CPU亲和性问题,
    SetProcessAffinityMask()  置CPU亲和性

    6.7:关闭无用的线程句柄减少系统资源的消耗


                    以上纯属个人见解,如有不对请留言,O(∩_∩)O谢谢!

                                                        好了,本章到此结束!     欢迎大家关注我的博客!(Knxxt)

本文转载自:http://www.knxty.com/bk/post/4.html 作者:七彩魔云

点评

我只想说,哥们,永垂不朽 应该用词不当吧   湖南省怀化市  发表于 2015-4-18 02:47

评分

参与人数 8好评 +4 精币 +10 收起 理由
小白熊 + 1 + 2 今天剩下的,不能浪费了
上下左右空格 + 1 奉上小小红包希望笑纳
happyboy + 2 精彩文章希望继续努力
一个人的下午茶 + 1 精彩文章希望继续努力
梦生 + 1 + 2 奉上小小红包希望笑纳
改名字好难 + 1 奉上小小红包希望笑纳
尛龍科技 + 1 感谢分享,很给力!~
E族x叶玄 + 1 + 1 奉上小小红包希望笑纳

查看全部评分

本帖被以下淘专辑推荐:

结帖率:100% (2/2)

签到天数: 1 天

发表于 2024-6-18 14:28:01 | 显示全部楼层   江苏省无锡市
学习谢谢
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 20 天

发表于 2024-6-13 17:42:33 | 显示全部楼层   河北省秦皇岛市
讲的挺好,下次最好贴上代码说明一下,嘿嘿
回复 支持 反对

使用道具 举报

签到天数: 4 天

发表于 2023-10-28 20:51:26 | 显示全部楼层   江苏省苏州市
66666666666666666666
回复 支持 反对

使用道具 举报

发表于 2023-3-27 10:20:04 | 显示全部楼层   上海市上海市
原子操作不会被任何事务中断, 是哪怕线程结束,或者暂停, 这个原子操作也会执行吗
回复 支持 反对

使用道具 举报

结帖率:50% (2/4)
发表于 2020-7-26 11:43:26 | 显示全部楼层   山东省济南市
打包q 哇啦哇啦记录米的
回复 支持 反对

使用道具 举报

发表于 2016-12-11 17:32:26 | 显示全部楼层   重庆市重庆市
小白 不懂这些
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2016-11-9 22:20:46 | 显示全部楼层   江西省抚州市
真的1  真的不错哦
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 2 天

发表于 2016-11-9 22:17:23 | 显示全部楼层   河南省洛阳市
奉上小小红包希望笑纳
回复 支持 反对

使用道具 举报

结帖率:76% (13/17)

签到天数: 4 天

发表于 2016-11-5 21:25:03 | 显示全部楼层   湖北省十堰市
有视频教程么?
回复 支持 反对

使用道具 举报

结帖率:89% (8/9)
发表于 2016-9-25 23:42:44 | 显示全部楼层   河南省许昌市
来学习一下。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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