开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 829|回复: 28
打印 上一主题 下一主题
收起左侧

[易语言纯源码] 工作线程+异步消息投递模板(Windows原生线程消息机制)

[复制链接]
结帖率:60% (3/5)
跳转到指定楼层
楼主
发表于 前天 04:52 | 只看该作者 回帖奖励 |正序浏览 |阅读模式   广东省深圳市
分享源码
界面截图: -
是否带模块: -
备注说明: -
本帖最后由 易造轮 于 2026-7-30 08:17 编辑

这个方案是:Windows 线程消息队列(Message Queue)

  
子程序名返回值类型公开备 注
启动工作线程逻辑型 
变量名类 型静态数组备 注
hThread整数型 
g_就绪事件 = CreateEventA (0, 真, 假, 0)
hThread = CreateThread (0, 0, 到整数 (&工作线程), 0, 0, 0)
' ★ 等待线程消息队列建立完毕(最多等3秒)
WaitForSingleObject (g_就绪事件, 3000)
CloseHandle (g_就绪事件)
返回 ()
子程序名返回值类型公开备 注
工作线程整数型 
变量名类 型静态数组备 注
ret整数型 
msgId整数型 
g_msg指针 = 申请内存_ (28)  ' 申请28字节(MSG结构大小)
' ★ 关键:先建立消息队列(否则PostThreadMessage会失败)
PeekMessageA (g_msg指针, 0, 0, 0, 0)  ' 建立消息队列
g_线程ID = GetCurrentThreadId ()  ' 记录线程ID
SetEvent (g_就绪事件)  ' 通知外部:我准备好了
' 消息循环
判断循环首 ()
ret = GetMessageA (g_msg指针, 0, 0, 0)
如果真 (ret = 0)
跳出循环 ()
' 偏移4取消息号,偏移8取wParam
msgId = _Get (g_msg指针, 4)
如果真 (msgId = 1025)
' wParam就是投递的id
输出调试文本 (“收到ID:”到文本 (_Get (g_msg指针, 8)))

判断循环尾 ()
释放内存_ (g_msg指针)
返回 (0)
子程序名返回值类型公开备 注
投递ID 
参数名类 型参考可空数组备 注
参_id整数型
PostThreadMessageA (g_线程ID, 1025, 参_id, 0)
子程序名返回值类型公开备 注
停止工作线程  
PostThreadMessageA (g_线程ID, 18, 0, 0)  ' WM_QUIT
子程序名返回值类型公开备 注
_Get整数型 汇编读指针/内存地址 带偏移  整数型  数据长度=4
参数名类 型参考可空数组备 注
参数_指针整数型addr
参数_偏移整数型i
置入代码 ({ 139, 69, 8, 3, 69, 12, 139, 0, 201, 194, 8, 0 })
返回 (0)
子程序名返回值类型公开备 注
申请内存_整数型 返回内存地址,失败返回0 HeapAlloc
参数名类 型参考可空数组备 注
内存大小整数型字节
参数整数型查看常量“#HEAP_”,默认空为 #HEAP_ZERO_MEMORY
如果真 (是否为空 (参数))
参数 = #HEAP_ZERO_MEMORY  ' 如果重新分配请求的大小较大,则超出原始大小的附加内存区域将初始化为零。内存块的内容直到其原始大小不受影响
返回 (HeapAlloc (GetProcessHeap_ASM (), 8, 内存大小))
子程序名返回值类型公开备 注
释放内存_逻辑型 成功返回真 HeapFree
参数名类 型参考可空数组备 注
内存地址整数型
如果真 (内存地址 = 0)
返回 ()
返回 (HeapFree (GetProcessHeap_ASM (), 0, 内存地址))
子程序名返回值类型公开备 注
GetProcessHeap_ASM整数型 取内存堆句柄
置入代码 ({ 100, 161, 24, 0, 0, 0, 139, 64, 48, 139, 64, 24, 201, 195 })
返回 (0)
全局变量名类 型数组公开备 注
g_线程ID整数型  
g_就绪事件整数型  
g_msg指针整数型 MSG结构内存指针

DLL命令名返回值类型公开备 注
CreateThread整数型 创建并启动一条新线程 成功返回新线程的句柄,失败返回NULL(0)
DLL库文件名:
kernel32
在DLL库中对应命令名:
CreateThread
参数名类 型传址数组备 注
线程安全标志整数型lpThreadAttributes 线程安全标志 NULL(0)使用默认安全属性
初始栈空间大小整数型dwStackSize 表示线程初始栈空间大小。传入(Null)0表示使用默认大小(1MB)
要执行的函数地址通用型lpStartAddress 要执行的线程函数地址,多个线程可以使用同一个函数地址 &子程序指针 或 到整数(&子程序指针)
附加参数整数型lpParameter 传递给线程函数的参数
创建选项标志整数型dwCreationFlags 指定额外的标志来控制线程的创建,为Null(0)表示线程创建之后立即就可以进行调度,如果为CREATE_SUSPENDED(4)则表示线程创建后暂停运行,这样它就无法调度,直到调用ResumeThread()
接收返回线程ID的变量整数型lpThreadId 提供变量来接收返回线程的唯一标识符ID,传入NULL(0)表示不需要返回该线程ID
DLL命令名返回值类型公开备 注
PostThreadMessageA整数型 
DLL库文件名:
user32.dll
在DLL库中对应命令名:
PostThreadMessageA
参数名类 型传址数组备 注
dwThreadId整数型
Msg整数型
wParam整数型
lParam整数型
DLL命令名返回值类型公开备 注
GetMessageA整数型 
DLL库文件名:
user32.dll
在DLL库中对应命令名:
GetMessageA
参数名类 型传址数组备 注
lpMsg整数型
hWnd整数型
wMsgFilterMin整数型
wMsgFilterMax整数型
DLL命令名返回值类型公开备 注
PeekMessageA整数型 
DLL库文件名:
user32.dll
在DLL库中对应命令名:
PeekMessageA
参数名类 型传址数组备 注
lpMsg整数型
hWnd整数型
wMsgFilterMin整数型
wMsgFilterMax整数型
wRemoveMsg整数型
DLL命令名返回值类型公开备 注
GetCurrentThreadId整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
GetCurrentThreadId
参数名类 型传址数组备 注
DLL命令名返回值类型公开备 注
CreateEventA整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
CreateEventA
参数名类 型传址数组备 注
lpEventAttributes整数型
bManualReset逻辑型
bInitialState逻辑型
lpName整数型
DLL命令名返回值类型公开备 注
SetEvent逻辑型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
SetEvent
参数名类 型传址数组备 注
hEvent整数型
DLL命令名返回值类型公开备 注
WaitForSingleObject整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
WaitForSingleObject
参数名类 型传址数组备 注
hHandle整数型
dwMilliseconds整数型
DLL命令名返回值类型公开备 注
CloseHandle逻辑型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
CloseHandle
参数名类 型传址数组备 注
hObject整数型
DLL命令名返回值类型公开备 注
HeapAlloc整数型 申请内存
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
HeapAlloc
参数名类 型传址数组备 注
hHeap整数型
dwFlags整数型
dwBytes整数型
DLL命令名返回值类型公开备 注
HeapFree逻辑型 BOOL WINAPI  HeapFree
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
HeapFree
参数名类 型传址数组备 注
hHeap整数型_In_ HANDLE hHeap,
dwFlags整数型_In_ DWORD  dwFlags,
lpMem整数型_In_ LPVOID lpMem
常量名称常量值公 开备 注
HEAP_ZERO_MEMORY8如果重新分配请求的大小较大,则超出原始大小的附加内存区域将初始化为零。内存块的内容直到其原始大小不受影响


点评

这算不上异步啊,没有上下文管理   甘肃省兰州市  发表于 昨天 20:45

评分

参与人数 1精币 +1 收起 理由
kyo9766 + 1 感谢分享,很给力!~

查看全部评分


本帖被以下淘专辑推荐:

28
发表于 昨天 19:17 | 只看该作者   辽宁省丹东市
回复 支持 反对

使用道具 举报

27
发表于 昨天 17:56 | 只看该作者   陕西省西安市
感谢大佬分享
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)
26
发表于 昨天 16:42 | 只看该作者   山东省青岛市
看看怎么实现的,感谢分享
回复 支持 反对

使用道具 举报

结帖率:0% (0/6)
25
发表于 昨天 15:03 | 只看该作者   江苏省南京市

感谢大神分享~!
回复 支持 反对

使用道具 举报

签到天数: 1 天

24
发表于 昨天 11:40 | 只看该作者   山东省青岛市
很赞同,谢谢你的精彩分享!
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)
23
发表于 昨天 10:07 高大上手机用户 | 只看该作者   山东省淄博市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)
22
发表于 昨天 09:10 | 只看该作者   广东省汕头市
感谢大神分享~!
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)
21
发表于 昨天 08:36 | 只看该作者   广西壮族自治区玉林市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:60% (3/5)
20
 楼主| 发表于 昨天 00:02 | 只看该作者   广东省深圳市
by626 发表于 2026-7-30 13:59
根本用不来有没有例子看看

扔给豆包问问就知道了
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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