易语言资源网 - 做最全的易语言资源下载社区
精易论坛授权登录

基于消息循环的多线程   [复制链接]

    2022-05-18 09:31:05
    模块控件源码
    易语言资源网
    3167 次浏览
    来源链接


想法来自 网易的nbase库 不过网易的nbase库是自写了消息循环  我是直接用了 winapi

每条线程都有属于自己的消息循环, 通过 PostThreadMessage API 让指定线程 执行指定的消息

当没有消息时候, 会阻塞线程直到 获取到消息

目前唯一的缺点: 没有办法接管主线程的消息循环 无法实现 子线程通知主线程调用某个函数

下面是说明(模块也有带说明):

OnInit 挂接一个函数 为本类管理线程的初始化函数 (当线程被创建后, 会第一时间调用挂接的函数)

参数1: 子程序指针

OnClose 挂接一个函数 为本类管理线程的关闭函数 (当线程即将被关闭前, 会调用挂接的函数)

参数1: 子程序指针

Create 创建线程 (创建出来的线程由本类管理生命周期)

PostTask_0 投递任务 (向本类管理的线程投递一个任务)

参数1: 子程序指针 (为你想让线程执行的某个子程序, 子程序不能带有参数)

PostTask_1 投递任务 (向本类管理的线程投递一个任务)

参数1: 子程序指针 (为你想让线程执行的某个子程序, 子程序可以带有参数但是只能是一个)

PostRepeatedTask 投递定时任务 (向本类管理的线程投递一个定时任务) 定时任务为循环任务 线程会不停调用 所投递过来的子程序

参数1: 子程序指针 (为你想让线程执行的某个子程序, 子程序不能带有参数)

参数2: 执行的时间 (假设1000, 那么就是每隔1s执行一次)

UnPostRepeatedTask 取消投递的定时任务

参数1: 参数1: 子程序指针 (为之前投递定时任务的子程序指针)

Close 关闭当前线程 并通知释放线程资源

关于源码中的 MessageLoop 这个函数 其实是可以放在类外的 但是还是要执行转换  把当前类的指针传到 MessageLoop  函数里面 执行转换 这样才能调用类中的函数

最后感觉写出来没有什么用 因为没有办法动态的创建类 无法控制创建出来的数量 就当玩具了 有一说一 易语言的类真迷惑



点我下载 (已有 99 次下载)

引用模块


源码文件名 模块文件名
test.e
MultiThread.ec


引用支持库


源码文件名 支持库文件名 支持库标识
MultiThread.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325
特殊功能支持库 3.1 A512548E76954B6E92C21055517615B0
test.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325
特殊功能支持库 3.1 A512548E76954B6E92C21055517615B0


[错误报告]   上一篇:一键优化键盘鼠标设置...     下一篇:远调Call的