马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、前言
F点高效线程池模块,英文名:FThreadPool;是本人采用C++开发自用的模块,通过易模块转换后可供易语言直接调用的线程模块,包括普通线程、线程池以及定时器等常规线程操作,为解决易自带线程参数无法多参多类型传递、且传递不安全等问题;
本模块中内置采用了包含智能指针、参数列表、高速队列、原子锁等开发技术,以及内置独特的参数保护模式,即使参数错误使用乱传递指针也不会导致崩溃,保证线程池高效且安全;
本模块原为本人自用且只在VIP群里发过,现分享出来,使用完全免费无任何限制;
二、模块文件说明
- FThreadPool.dll:C++开发功能核心dll文件,使用需放到源码和发布程序核心目录,无此文件功能无法使用
三、部分功能示例及注意事项
.版本 2
.局部变量 参数1, 类_F点线程参数
参数1.创建 ()
参数1.加入文本 (“这是个线程”)
参数1.加入文本 (“a”)
参数1.加入双精度小数 (1.235)
参数1.加入整数 (100)
参数1.加入逻辑值 (真)
F点线程_启动 (&参考_独立线程执行函数, 参数1)
说明:
- 这里参数可直接为空;如要传递参数,通过`参数1.创建 ()`方法创建后在参数类中加入数据,可多次加入相同类型的数据,个数不限,取数据的时候按照顺序从0开始取,如没有数据将返回空,即使取出数据超出范围程序也不会异常,也可取出对应类型参数的个数,通过个数判断获取
- 创建成功后会返回一个线程句柄,该句柄为内置非易语言线程句柄不要混用,通过该句柄可以获取线程执行的状态,或通过`F点线程_等待 (线程句柄)`等待当前线程执行完成;
注意:
- 为了参数安全、参数通过`F点线程_启动`功能传递后就会自动失效,当前无法再次使用,如要再次使用传递给其他线程需要重新创建,这里也不需要手动取释放该参数;但是如果该参数未使用未传递则需要手动释放该参数;
.版本 2
线程池.初始化 (111, 10)
线程池.开始运行 ()
.计次循环首 (100, i)
' 创建的参数会在传递使用后自动释放,不用手动销毁
参数1.创建 ()
参数1.加入整数 (i)
参数1.加入逻辑值 (真)
参数1.加入文本 (“这是第” + 到文本 (i) + “个线程的第一个文本参数”)
参数1.加入双精度小数 (i + 0.11)
线程池.执行线程 (&参考_线程执行函数, 参数1)
.计次循环尾 ()
说明:
- 线程池使用之前需初始化,初始化传递两个参数,第一个为标识,第二个为线程数,线程数可创建后动态添加;
- 线程池初始完成后可在适当位置开始运行,然后通过`执行线程`方法投递执行函数,参数的传递和创建线程一样,如上方代码循环投递100个执行函数,执行函数投递后会按队列空闲线程自动分配执行;
- 线程池在不使用的情况下,可`停止运行`,停止运行后,如要再次开始需要重新开始,为避免出问题,因此建议不要中途停止,可在程序结束的时候停止整个线程池;
.版本 2
参数1.创建 ()
参数1.加入文本 (“这是个定时执行的函数”)
定时器.置执行函数 (&参考_周期函数, 参数1)
定时器.开始运行 (1000, 10)
说明:
- 如上定时器需要先设置实现函数后在开始运行,在开始运行中设置执行的周期和精度,精度值越小精度越高,但资源消耗越大;
- 定时器执行函数存在几十毫秒的误差,请注意判断;
- 定时器执行非柱塞执行,到周期时间后为异步队列执行,如果上一次执行函数存在柱塞未执行完成会等待上一次执行完成后才会执行下一次,所以定时器中不建议使用高延迟阻塞的代码;
.版本 2
.子程序 参考_独立线程执行函数
.参数 参数指针, 整数型, , 该参数指针只在当前有效,通过“类_F点线程参数”绑定后可取出对应的参数值
.局部变量 参数, 类_F点线程参数
参数.绑定 (参数指针)
' 延迟模拟一下这里处理了东西’
输出调试文本 (到文本 (参数.取整数 ()) + “|” + 参数.取文本 (0) + “|” + 到文本 (参数.取双精度小数 ()))
说明:
- 线程、线程池、定时器采用的执行函数都为该模板函数,注意不要写到类方法中,该函数只有一个参数,参数就为传递的`类_F点线程参数`类的指针,通过绑定后,即可取出传递的参数;
- 执行函数中可直接操作窗口控件,但不建议在执行函数中创建和销毁控件;
- 线程执行除了定时器或线程池只有一个线程时为有序外,其他都无序执行,如要有序执行需自行加锁控制处理;
四、模块下载(回复后可见)
模块源码以及示例代码
五、后期预计扩展
线程池的线程动态减少、状态信息等……………………当然有什么想法你也可以在本帖中回复;
|