开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

楼主: 阿婆
收起左侧

[易语言纯源码] 超级日志框模块,基于完成端口实现的日志队列,绝对线程安全哦

[复制链接]
结帖率:81% (64/79)
发表于 2024-3-23 01:09:47 | 显示全部楼层   江西省上饶市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2024-3-23 00:27:09 | 显示全部楼层   安徽省六安市

哥,时间咋加上毫秒
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
 楼主| 发表于 2024-3-20 12:19:28 | 显示全部楼层   江苏省连云港市
此处为最新版 超级日志框.e (35.72 KB, 下载次数: 94)
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
 楼主| 发表于 2024-3-19 10:40:53 | 显示全部楼层   江苏省连云港市
由于转语言了,所以很少在逛易论坛了,没想到这么老的帖子还有人关注,以下是最新代码,原理未变,把更新日志的单独线程换成了定时器也加入了写文件 表现似乎更好的同时代码也更轻量 以下是参考 只有一个类 原理不变 缺失的常规函数还请自行补全
  
窗口程序集名保 留  保 留备 注
超级日志框, , 公开   
变量名类 型数组备 注
m_IOCP整数型  
m_OnTimerProc整数型  
m_Window整数型  
m_Edit超级编辑框  
m_Font字符格式  
m_MaxLine整数型  
m_EditLine整数型  
m_FileLine整数型  
m_Dir文本型  
m_Name文本型  
m_File整数型  
m_Level整数型  

子程序名返回值类型公开备 注
_初始化 当基于本类的对象被创建后,此方法会被自动调用
m_OnTimerProc = 类回调取地址 (2, 4, , )
m_IOCP = CreateIoCompletionPort (-1, 0, 0, 0)  ' 创建完成端口
子程序名返回值类型公开备 注
_销毁 当基于本类的对象被销毁前,此方法会被自动调用
解除 ()
类回调释放 (m_OnTimerProc)
如果真 (m_File > 0)
关闭文件 (m_File)
CloseHandle (m_IOCP)
子程序名返回值类型公开备 注
__WindowProc整数型 
参数名类 型参考可空数组备 注
hWnd整数型
msg整数型
wParam整数型
lParam整数型
变量名类 型静态数组备 注
oldproc整数型 
时间整数型 
级别整数型 
指针整数型 
内容文本型3时间 级别 内容
颜色整数型3颜色 颜色 颜色
i整数型 
oldproc = GetPropA (hWnd, “__WindowProc_Timer”)
判断 (msg = #WM_TIMER )
如果真 (GetQueuedCompletionStatus (m_IOCP, 时间, 级别, 指针, 0))  ' 本身会线程安全,无需加锁
颜色 [1]MemGetInt (指针, 0)
颜色 [2]多项选择 (级别, #墨绿, #橙黄, #红色 )
颜色 [3]MemGetInt (指针, 4)
内容 [1]“[”TimeFormat (增减时间 (到时间 (“1970-01-01 08:00:00”), #秒, 时间), , )“] ”
内容 [2]多项选择 (级别, “[信息] ”, “[警告] ”, “[错误] ”)
内容 [3]MemGetText (指针, 8, )#换行符
MemFree (指针)
' 优先处理写文件
如果真 (m_Dir ≠ “” 级别 ≥ m_Level)
如果真 (m_File = 0)
m_File = 打开文件 (m_Dir + m_Name + “_”TimeFormat (, “yyyyMMdd”, “_HHmmss”)“.log”, #重写, #无限制 )
移到文件尾 (m_File)

如果真 (m_File > 0)
写出文本 (m_File, 内容 [1] + 内容 [2] + 内容 [3])
m_FileLine = m_FileLine + 1
如果真 (m_FileLine ≥ m_MaxLine)
关闭文件 (m_File)
m_File = 0
m_FileLine = 0



' 更新UI
m_EditLine = m_EditLine + 1
如果真 (m_EditLine ≥ m_MaxLine)
m_Edit.内容 = “”
m_EditLine = 0

计次循环首 (3, i)
m_Edit.起始选择位置 = 取文本长度 (m_Edit.内容)
m_Font.文本颜色 = 颜色 [i]
m_Edit.置选择区字符格式 (m_Font)
m_Edit.被选择文本 = 内容 [i]
计次循环尾 ()

返回 (0)


返回 (CallWindowProc (oldproc, hWnd, msg, wParam, lParam))
子程序名返回值类型公开备 注
注册逻辑型 
参数名类 型参考可空数组备 注
编辑框超级编辑框组件:扩展界面支持库二.超级编辑框
字体文本型默认:微软雅黑
字号整数型默认:9
最大行数整数型日志框允许显示的最大行数(同:单个日志文件最大允许写入行数),默认:5200  换行标志CRLF
保存目录文本型指定日志文件保存的目录,默认:空(不写文件)
文件名称文本型日志文件名(不包含后缀)默认:“日志”
记录级别整数型日志记录级别(#信息 < #警告 < #错误),默认:#信息 表示全部记录
变量名类 型静态数组备 注
oldproc整数型 
m_MaxLine = 选择 (最大行数 ≤ 0, 5200, 最大行数)
m_Font.文本颜色 = #黑色
m_Font.字体名称 = 选择 (字体 = “”, “微软雅黑”, 字体)
m_Font.字体大小 = 选择 (字号 ≤ 0, 9, 字号)
m_Level = 选择 (记录级别 ≥ 1 记录级别 ≤ 3, 记录级别, 1)
m_Name = 选择 (文件名称 = “”, “日志”, 文件名称)
m_Dir = 保存目录
如果真 (m_Dir ≠ “”)
如果真 (DirExist (m_Dir))
DirCreate (m_Dir)


如果真 (是否已创建 (编辑框))
m_Edit = 编辑框
m_Edit.自动换行 = 假
m_Edit.只读 = 真
m_Edit.隐藏选择 = 假
m_Window = m_Edit.取窗口句柄 ()
oldproc = GetPropA (m_Window, “__WindowProc_Timer”)
如果真 (oldproc = 0)
oldproc = SetWindowLongA (m_Window, #GWL_WNDPROC, m_OnTimerProc)
SetPropA (m_Window, “__WindowProc_Timer”, oldproc)

返回 (SetTimer (m_Window, m_Window, 10, 0) ≠ 0)
返回 ()
子程序名返回值类型公开备 注
解除 
变量名类 型静态数组备 注
hWnd整数型 
oldproc整数型 
KillTimer (m_Window, m_Window)
oldproc = GetPropA (m_Window, “__WindowProc_Timer”)
如果真 (oldproc ≠ 0)
SetWindowLongA (m_Window, #GWL_WNDPROC, oldproc)
RemovePropA (m_Window, “__WindowProc_Timer”)

子程序名返回值类型公开备 注
加入日志逻辑型 
参数名类 型参考可空数组备 注
日志内容文本型日志内容,末尾无需带换行
日志级别整数型日志级别,默认:#信息 (#信息 < #警告 < #错误)
日志颜色整数型日志颜色,默认:#黑色
时间颜色整数型时间颜色,默认:#天蓝
变量名类 型静态数组备 注
指针整数型 
时间整数型 
日志级别 = 选择 (日志级别 ≥ 1 日志级别 ≤ 3, 日志级别, 1)
如果真 (日志内容 = “”)
返回 ()

时间 = 取时间间隔 (取现行时间 (), 到时间 (“1970-01-01 08:00:00”), #秒 )
指针 = MemAlloc (取文本长度 (日志内容) + 1 + 8)
如果真 (指针 ≤ 0)
返回 ()
MemSetInt (指针, 0, 选择 (是否为空 (时间颜色), #天蓝, 时间颜色))
MemSetInt (指针, 4, 日志颜色)
MemSetText (指针, 8, 日志内容, )
返回 (PostQueuedCompletionStatus (m_IOCP, 时间, 日志级别, 指针))
子程序名返回值类型公开备 注
清空日志 
如果真 (是否已创建 (m_Edit))
m_Edit.内容 = “”
处理事件 ()

子程序名返回值类型公开备 注
定位日志 
参数名类 型参考可空数组备 注
文本文本型
变量名类 型静态数组备 注
行数组文本型0
i整数型 
可视行整数型 
如果真 (是否已创建 (m_Edit))
可视行 = m_Edit.取首可视行 ()
行数组 = 分割文本 (m_Edit.内容, #换行符, )
计次循环首 (取数组成员数 (行数组), i)
如果真 (寻找文本 (行数组 [i], 文本, , ) ≠ -1)
m_Edit.滚动 (i - 可视行 - 1)
跳出循环 ()

计次循环尾 ()
处理事件 ()


i支持库列表   支持库注释   
iext2扩展界面支持库二

回复 支持 反对

使用道具 举报

结帖率:89% (8/9)

签到天数: 2 天

发表于 2024-3-17 11:58:33 | 显示全部楼层   山东省菏泽市
        支持开源~!感谢分享
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2024-2-28 16:48:54 | 显示全部楼层   四川省内江市

感谢分享,很给力!~
回复 支持 0 反对 1

使用道具 举报

签到天数: 1 天

发表于 2024-2-26 15:37:45 | 显示全部楼层   江苏省连云港市
花了一晚上封装这么个玩意,挺实用的,希望有缘点进来的不喜勿喷。
回复 支持 反对

使用道具 举报

发表于 2024-2-20 03:38:52 高大上手机用户 | 显示全部楼层   河北省唐山市
66666
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2023-12-25 16:27:53 | 显示全部楼层   重庆市重庆市
线程绝对安全
回复 支持 反对

使用道具 举报

发表于 2023-12-20 22:11:26 | 显示全部楼层   河北省邢台市
牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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