精易论坛
标题:
基于消息循环的多线程
[打印本页]
作者:
小诺0号
时间:
2022-5-12 15:09
标题:
基于消息循环的多线程
想法来自 网易的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 函数里面 执行转换 这样才能调用类中的函数
最后感觉写出来没有什么用 因为没有办法动态的创建类 无法控制创建出来的数量 就当玩具了 有一说一 易语言的类真迷惑
MultiThread.zip
2022-5-12 15:09 上传
点击文件名下载附件
下载积分: 精币 -2 枚
11.05 KB, 下载次数: 26, 下载积分: 精币 -2 枚
作者:
泭流
时间:
2022-5-12 16:36
感谢分享
作者:
嫂子
时间:
2022-5-12 19:51
子类化就可以接管UI线程的消息了。
作者:
AnxiangLemon
时间:
2022-5-12 20:14
真不错 有机会翻译下这个
https://125.confly.eu.org/forum.php?mod ... 14729262&extra=
作者:
深圳梦
时间:
2022-5-12 20:30
学习一下,感谢分享
作者:
camingo
时间:
2022-5-12 21:04
使用消息的线程池
作者:
116154801
时间:
2022-5-13 02:01
66666666666666666666666666
作者:
xjshuaishuai
时间:
2022-5-13 07:19
谢谢分享!
作者:
易神
时间:
2022-5-13 11:25
支持开源~!感谢分享
作者:
柚粮薪
时间:
2022-5-13 13:49
支持开源~!感谢分享
作者:
1090448765
时间:
2022-5-13 19:10
谢谢分享!
作者:
成神之日
时间:
2022-5-14 04:39
666666666666666
作者:
弱鸡第一步
时间:
2022-5-14 20:05
这是什么字体呀 好好看
作者:
644776868
时间:
2022-5-15 19:57
{:7_436:}{:7_436:}{:7_436:}{:7_436:}{:7_436:}{:7_436:}
作者:
yujiandong
时间:
2022-5-21 10:19
支持开源~!感谢分享
作者:
flashercs1
时间:
2024-10-13 22:24
感谢分享,感谢感谢感谢感谢
欢迎光临 精易论坛 (https://125.confly.eu.org/)
Powered by Discuz! X3.4