你在线程池回调函数中使用了_读内存文本(局_参数),但没有对内存释放进行保护,当多个线程同时操作同一块内存区域时,可能会出现内存访问冲突,在按钮点击事件中,你使用了循环变量i,但它没有被正确初始化和递增,每次点击按钮时,i的值都是未定义的,导致消息内容可能重复,使用_写内存文本分配的内存没有对应的释放机制,长时间运行会导致内存泄漏。
修改后的代码可以尝试一下:
窗口程序集名 | 保 留 | 保 留 | 备 注 | 窗口程序集_启动窗口 | | | | 变量名 | 类 型 | 数组 | 备 注 | 线程池 | 鱼刺类_线程池Ex | | 互斥锁 | 整数型 | | 消息队列 | 文本型 | 待发送的消息队列 | 当前索引 | 整数型 | |
线程池. 创建 (1, 1 ) 互斥锁 = 互斥锁_创建 ()当前索引 = 0 变量名 | 类 型 | 静态 | 数组 | 备 注 | 局_消息内容 | 文本型 | | | i | 整数型 | | |
i = 当前索引 + 1 当前索引 = i 局_消息内容 = “呵呵哒” + 到文本 (i ) 互斥锁_锁定 (互斥锁 )加入成员 (消息队列, 局_消息内容 )互斥锁_解锁 (互斥锁 ) 线程池. 投递任务 (&处理消息队列, 0 )互斥锁_锁定 (互斥锁 ) 如果真 (取数组成员数 (消息队列 ) > 0 ) 待发送消息 = 消息队列 [1 ] 删除成员 (消息队列, 1 ) 互斥锁_解锁 (互斥锁 ) 发送消息 (待发送消息 ) 互斥锁_解锁 (互斥锁 ) 文本指针 = _写内存文本 (消息内容 ) 调试输出 ("发送消息: " & _读内存文本 (文本指针 )) 释放内存 (文本指针 )
[color=rgba(0, 0, 0, 0.85)]这样修改后,代码可以安全地实现 "一次给一个人发一条消息" 的需求,避免了内存冲突和泄漏问题。如果实际发送消息涉及网络操作,建议在发送消息[color=rgba(0, 0, 0, 0.85)]子程序中添加错误处理和重试机制。
|