开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 794|回复: 8
收起左侧

[易语言] 控制台程序占用CPU太高?

[复制链接]
结帖率:40% (6/15)
发表于 2023-3-27 12:04:41 | 显示全部楼层 |阅读模式   新疆维吾尔自治区克拉玛依市
5精币
【场景】Mysql数据库的一个业务表,有一个心跳字段,需要每分钟监测一次。             用易语言的开发的控制台程序,连接数据库,读取记录,很容易实现。
【问题】该控制台程序,运行时,消耗CPU较高,长期占用近50%的CPU资源。


【疑问】控制台程序都是这样的吗?都是占用CPU较高吗?目前只是连接Mysql数据库,读取一个记录,没有其他功能。





回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳

结帖率:90% (9/10)

签到天数: 15 天

发表于 2023-3-27 12:57:27 高大上手机用户 | 显示全部楼层   河北省邯郸市
你的问题
1。不是
2。不是
回复

使用道具 举报

结帖率:100% (8/8)

签到天数: 31 天

发表于 2023-3-27 13:09:21 | 显示全部楼层   广东省东莞市
代码问题吧
回复

使用道具 举报

结帖率:73% (52/71)

签到天数: 18 天

发表于 2023-3-27 14:41:23 | 显示全部楼层   新疆维吾尔自治区喀什地区
QQQ3322419494
回复

使用道具 举报

结帖率:89% (16/18)

签到天数: 4 天

发表于 2023-3-27 19:44:02 | 显示全部楼层   浙江省杭州市
看线程的堆栈
回复

使用道具 举报

结帖率:67% (2/3)

签到天数: 5 天

发表于 2023-3-27 19:56:04 | 显示全部楼层   广东省珠海市
问题:不会
疑问:不会
总结:代码有问题
回复

使用道具 举报

结帖率:40% (6/15)
 楼主| 发表于 2023-3-27 20:51:39 | 显示全部楼层   新疆维吾尔自治区乌鲁木齐市
[JavaScript] 纯文本查看 复制代码
.版本 2
.支持库 shell
.支持库 spec
.支持库 iconv
.支持库 mysql
.支持库 dp1

.程序集 程序集1
.程序集变量 程_MYSQL句柄, 整数型

.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行

' 打开写日志的文件
程集_文件号 = 打开文件 (取特定目录 (#我的文档) + “logSms_” + 时间_到文本 (, 3, 1, 2) + “.txt”, #改写, 1)
移到文件尾 (程集_文件号)
全_坐席超30分钟通知人 = “00000000000”

' 程序启动
子程序_输出日志 (“程序启动”)

' 连接数据库
.如果 (子程序_MYSQL连接 () = 0)
    子程序_输出日志 (“数据库链接失败,请检查设置后再试!”)
    标准输出 (, “数据库连接失败,将在5秒后自动关闭!”)
    延迟 (5000)
    返回 (0)
.否则
    子程序_输出日志 (“数据库链接成功,现在开始监测!”)
.如果结束

' 设置心跳
全_检查心跳 = 到整数 (时间_到时间戳 (, 真, 真))
.判断循环首 (全_检查心跳 ≠ 1)
    全_小时 = 取小时 (取现行时间 ())
    .如果 (全_小时 < 8)
        ' 则不提醒,不监测;直接跳转到延时命令
        子程序_输出日志 (“当前时间不在检查范围内!”)
    .否则

    .如果结束

    ' 业务① 监控电话坐席通过超过30分钟或者离线超过10分钟
    子程序_输出日志 (“开启业务① 监控电话坐席通过超过30分钟或者离线超过10分钟”)
    子程序_监控中心坐席通过超时及离线 ()

    延迟 (60000)

    ' 业务② 检测自动录单是否在线
    子程序_输出日志 (“监测WorkStatus数据库的所有业务”)
    子程序_监测在线业务状态 ()

    ' 最后检查一下待发短xin,一次性发完
    子程序_输出日志 (“检查待发短xin中……”)
    子程序_检查待发短xin并发送 ()

    ' 延迟一定时间后,开启下一次检查
    全_ID = 全_ID + 1

    延迟 (300000)

.判断循环尾 ()

返回 (0)  ' 可以根据您的需要返回任意数值



.子程序 子程序_输出日志
.参数 参_文本, 文本型
.局部变量 局_增加文本, 文本型

局_增加文本 = 时间_到文本 (, 1, , 2) + “ -> ” + 参_文本

标准输出 (, 局_增加文本 + #换行符 + #换行符)
写文本行 (程集_文件号, 局_增加文本)
.如果 (全_行数 > 10000)
    程集_文件号 = 打开文件 (取特定目录 (#我的文档) + “logSms_” + 时间_到文本 (, 3, 1, 2) + “.txt”, #改写, 1)
    移到文件尾 (程集_文件号)
    全_行数 = 0
.否则
    全_行数 = 全_行数 + 1

.如果结束


.子程序 子程序_检查待发短xin并发送
.局部变量 局_SQL, 文本型
.局部变量 局_记录数, 整数型
.局部变量 局_记录集句柄, 整数型
.局部变量 局_计数, 整数型
.局部变量 局_Id, 文本型
.局部变量 局_smsOnly, 文本型
.局部变量 局_sendTel, 文本型
.局部变量 局_sendVar, 文本型
.局部变量 局_modelID, 文本型
.局部变量 局_gbID, 文本型
.局部变量 局_返回文本, 文本型
.局部变量 局_结果, 逻辑型

局_SQL = “Select Id,smsOnly,sendTel,sendVar,modelID,gbID from dbhy.yw_sms_worklist where sendStatus=0 Order by Id ASC”
局_SQL = 到文本 (编码转换 (到字节集 (局_SQL), #编码_GB2312, #编码_UTF_8, ))

.如果 (取记录集行数 (局_记录集句柄) > 0)


.否则
    子程序_输出日志 (“检查待发短xin结果 -- 无待发短xin”)
.如果结束


.如果 (执行SQL语句 (程_MYSQL句柄, 局_SQL))
    局_记录集句柄 = 取记录集 (程_MYSQL句柄)
    局_记录数 = 取记录集行数 (局_记录集句柄)

    .计次循环首 (局_记录数, 局_计数)
        读字段值 (局_记录集句柄, 0, 局_Id)
        读字段值 (局_记录集句柄, 1, 局_smsOnly)
        读字段值 (局_记录集句柄, 2, 局_sendTel)
        读字段值 (局_记录集句柄, 3, 局_sendVar)
        读字段值 (局_记录集句柄, 4, 局_modelID)
        读字段值 (局_记录集句柄, 5, 局_gbID)
        局_smsOnly = 到文本 (编码转换 (到字节集 (局_smsOnly), #编码_UTF_8, #编码_GB2312, ))
        局_sendTel = 到文本 (编码转换 (到字节集 (局_sendTel), #编码_UTF_8, #编码_GB2312, ))
        局_sendVar = 到文本 (编码转换 (到字节集 (局_sendVar), #编码_UTF_8, #编码_GB2312, ))
        局_modelID = 到文本 (编码转换 (到字节集 (局_modelID), #编码_UTF_8, #编码_GB2312, ))
        局_gbID = 到文本 (编码转换 (到字节集 (局_gbID), #编码_UTF_8, #编码_GB2312, ))

        子程序_输出日志 (“检查待发短xin结果 -- 有待发短xin,正在组织发送--唯一值[” + 局_smsOnly + “]接收号码[” + 局_sendTel + “]消息体[” + 局_sendVar + “]模板ID[” + 局_modelID + “]”)

        局_返回文本 = 子程序_TX_发送短xin_查发记 (“db7b3f2e2d2a439ce404943ed172acef”, 局_smsOnly, 局_modelID, 局_sendTel, 局_sendVar, 局_gbID, 假)
        子程序_输出日志 (“短xin发送结果--” + 局_返回文本)
        ' 将发送结果写到数据库;不管成功与否,都写到数据库
        局_SQL = “UPDATE dbhy.yw_sms_worklist SET sendStatus=1,sendTimes='” + 时间_到文本 (, 1, , 2) + “',smsStatus=1,backVar='” + 局_返回文本 + “' WHERE Id=” + 局_Id
        局_SQL = 到文本 (编码转换 (到字节集 (局_SQL), #编码_GB2312, #编码_UTF_8, ))
        局_结果 = 执行SQL语句 (程_MYSQL句柄, 局_SQL)
        .如果 (局_结果 = 真)
            子程序_输出日志 (“更新短xin发送结果 -- 真”)
        .否则
            子程序_输出日志 (“更新短xin发送结果 -- 假--更新语句:” + 局_SQL)
        .如果结束

        延迟 (40000)
        到下一行 (局_记录集句柄)
    .计次循环尾 ()

    释放记录集 (局_记录集句柄)
    子程序_输出日志 (“检查待发短息完毕!”)
.否则
    子程序_输出日志 (“检查待发短xin失败!”)
.如果结束


.子程序 子程序_MYSQL连接, 整数型
.局部变量 局_服务器IP, 文本型
.局部变量 局_服务器端口, 整数型
.局部变量 局_数据库名, 文本型
.局部变量 局_数据库用户名, 文本型
.局部变量 局_数据库密码, 文本型

局_服务器IP = “127.0.0.1”  ' //MYSQL服务器IP,默认127.0.0.1(本机)
局_服务器端口 = 3306  ' //MYSQL默认端口3306
局_数据库名 = “”  ' //要打开的数据库名,默认为空
局_数据库用户名 = “”  ' //数据库用户名,默认root
局_数据库密码 = “”  ' //数据库密码,如果无需验证则留空或随意填
程_MYSQL句柄 = 连接MySql (局_服务器IP, 局_数据库用户名, 局_数据库密码, 局_数据库名, 局_服务器端口)
返回 (程_MYSQL句柄)


.子程序 子程序_监控中心坐席通过超时及离线
.局部变量 局_SQL, 文本型
.局部变量 局_记录数, 整数型
.局部变量 局_记录集句柄, 整数型
.局部变量 局_计数, 整数型
.局部变量 局_myTel, 整数型
.局部变量 局_openTime, 日期时间型
.局部变量 局_statusXt, 整数型
.局部变量 局_telStatus, 文本型
.局部变量 局_间隔秒, 整数型
.局部变量 局_唯一值, 文本型
.局部变量 局_sendVar, 文本型
.局部变量 局_结果, 逻辑型

局_SQL = “Select myTel,openTime,statusXt,telStatus from dbhy.yw_zh_tel”
局_SQL = 到文本 (编码转换 (到字节集 (局_SQL), #编码_GB2312, #编码_UTF_8, ))
.如果 (执行SQL语句 (程_MYSQL句柄, 局_SQL))
    局_记录集句柄 = 取记录集 (程_MYSQL句柄)
    局_记录数 = 取记录集行数 (局_记录集句柄)
    .计次循环首 (局_记录数, 局_计数)
        读字段值 (局_记录集句柄, 0, 局_myTel)
        读字段值 (局_记录集句柄, 1, 局_openTime)
        读字段值 (局_记录集句柄, 2, 局_statusXt)
        读字段值 (局_记录集句柄, 3, 局_telStatus)
        局_telStatus = 到文本 (编码转换 (到字节集 (局_telStatus), #编码_UTF_8, #编码_GB2312, ))

        ' ①检查通过是否超过30分钟
        局_间隔秒 = 取时间间隔 (取现行时间 (), 局_openTime, 8)
        .如果真 (局_间隔秒 > 1800 且 局_telStatus = “通话中”)

            ' 读取唯一值
            局_唯一值 = 取数据摘要 (到字节集 (到文本 (局_myTel) + “-” + 时间_到文本 (局_openTime, 1, , 2)))
            局_sendVar = “[” + #引号 + 到文本 (局_myTel) + #引号 + “]”
            局_结果 = 子程序_新增待发短xin (局_唯一值, 读配置项 (取特定目录 (#我的文档) + “/云端监控.ini”, “接收号码”, “坐席超30分钟通知人”, ), 局_sendVar, “1546939”, “2222”, 1001)
            .如果 (局_结果 = 真)
                子程序_输出日志 (“业务[坐席通话超30分钟]检查状态【异常】新增待发短xin结果为【真】唯一值【” + 局_唯一值 + “】”)
            .否则
                子程序_输出日志 (“业务[坐席通话超30分钟]检查状态【异常】新增待发短xin结果为【假】唯一值【” + 局_唯一值 + “】”)
            .如果结束

        .如果真结束

        ' ②检查离线超过10分钟
        局_间隔秒 = 到整数 (时间_到时间戳 (, 真, )) - 局_statusXt
        .如果真 (局_间隔秒 > 600)
            ' 通过超过30分钟
            子程序_输出日志 (“业务[坐席坐席离线超10分钟]检查状态【异常】将调取写入待发短xin!”)
            ' 读取唯一值
            局_唯一值 = 取数据摘要 (到字节集 (到文本 (局_myTel) + “-” + 到文本 (局_statusXt) + “-600”))

            局_sendVar = “[” + #引号 + “坐席” + 到文本 (局_myTel) + #引号 + “,” + #引号 + 取文本中间 (时间_时间戳转文本 (到文本 (局_statusXt), 2), 12, 5) + #引号 + “]”
            局_结果 = 子程序_新增待发短xin (局_唯一值, 读配置项 (取特定目录 (#我的文档) + “/云端监控.ini”, “接收号码”, “坐席超30分钟通知人”, ), 局_sendVar, “1736738”, “2222”, 1001)
            .如果 (局_结果 = 真)
                子程序_输出日志 (“新增待发短xin结果为【真】唯一值【” + 局_唯一值 + “】”)
            .否则
                子程序_输出日志 (“新增待发短xin结果为【假】唯一值【” + 局_唯一值 + “】”)
            .如果结束

        .如果真结束

        延迟 (100)
        到下一行 (局_记录集句柄)
    .计次循环尾 ()

    释放记录集 (局_记录集句柄)
    子程序_输出日志 (“检查中心坐席状态完毕!”)
.否则
    子程序_输出日志 (“检查中心坐席状态,数据库打开失败!”)
.如果结束



.子程序 子程序_新增待发短xin, 逻辑型
.参数 局_smsOnly, 文本型
.参数 局_sendTel, 文本型
.参数 局_sendVar, 文本型
.参数 局_modelID, 文本型
.参数 局_gbID, 文本型
.参数 局_formWhere, 整数型
.局部变量 局_SQL, 文本型
.局部变量 局_记录数, 整数型
.局部变量 局_记录集句柄, 整数型
.局部变量 记录集句柄, 整数型


局_SQL = “Select COUNT(*) from dbhy.yw_sms_worklist where smsOnly='” + 局_smsOnly + “'”
局_SQL = 到文本 (编码转换 (到字节集 (局_SQL), #编码_GB2312, #编码_UTF_8, ))
.如果 (执行SQL语句 (程_MYSQL句柄, 局_SQL))
    局_记录集句柄 = 取记录集 (程_MYSQL句柄)
    读字段值 (局_记录集句柄, 0, 局_记录数)
    释放记录集 (局_记录集句柄)
.否则
    局_记录数 = 0
.如果结束

.如果 (局_记录数 = 0)
    局_SQL = “INSERT INTO dbhy.yw_sms_worklist(smsOnly,sendTel,sendVar,modelID,gbID,formWhere) VALUES('” + 局_smsOnly + “','” + 局_sendTel + “','” + 局_sendVar + “','” + 局_modelID + “','” + 局_gbID + “',” + 到文本 (局_formWhere) + “)”
    子程序_输出日志 (“新增待发短xinSQL:” + 局_SQL)
    局_SQL = 到文本 (编码转换 (到字节集 (局_SQL), #编码_GB2312, #编码_UTF_8, ))
    .如果 (执行SQL语句 (程_MYSQL句柄, 局_SQL) = 真)
        子程序_输出日志 (“新增短xin成功!”)
        返回 (真)
    .否则
        子程序_输出日志 (“新增短xin失败!执行语句失败,语句在上面!”)
        返回 (假)
    .如果结束

.否则
    子程序_输出日志 (“检查该唯一码[” + 局_smsOnly + “]已存在,本次属于重复发送,已经跳过!”)
    返回 (假)
.如果结束


.子程序 子程序_监测在线业务状态, , , 数据库workStatus的业务状态
.局部变量 局_SQL, 文本型
.局部变量 局_记录集句柄, 整数型
.局部变量 局_Id, 文本型
.局部变量 局_workName, 文本型
.局部变量 局_intimestamp, 整数型
.局部变量 局_intimes, 日期时间型
.局部变量 局_sendTel, 文本型
.局部变量 局_smsOnly, 文本型
.局部变量 局_sendVar, 文本型
.局部变量 局_modelID, 文本型
.局部变量 局_gbID, 文本型
.局部变量 局_formWhere, 整数型
.局部变量 局_结果, 逻辑型
.局部变量 局_记录数, 整数型
.局部变量 局_计数, 整数型


局_SQL = “Select Id,workName,intimestamp,intimes,sendTel from dbhy.yw_workstatus”
局_SQL = 到文本 (编码转换 (到字节集 (局_SQL), #编码_GB2312, #编码_UTF_8, ))
.如果 (执行SQL语句 (程_MYSQL句柄, 局_SQL))
    局_记录集句柄 = 取记录集 (程_MYSQL句柄)
    局_记录数 = 取记录集行数 (局_记录集句柄)

    .计次循环首 (局_记录数, 局_计数)
        读字段值 (局_记录集句柄, 0, 局_Id)
        读字段值 (局_记录集句柄, 1, 局_workName)
        读字段值 (局_记录集句柄, 2, 局_intimestamp)
        读字段值 (局_记录集句柄, 3, 局_intimes)
        读字段值 (局_记录集句柄, 4, 局_sendTel)
        局_workName = 到文本 (编码转换 (到字节集 (局_workName), #编码_UTF_8, #编码_GB2312, ))
        局_sendTel = 到文本 (编码转换 (到字节集 (局_sendTel), #编码_UTF_8, #编码_GB2312, ))

        ' 检查在线状态  不在线10分钟以上的,发送短息
        .如果 (到整数 (时间_到时间戳 (, 真, )) - 局_intimestamp > 600)
            子程序_输出日志 (“业务[” + 局_Id + “-” + 局_workName + “]检查状态【异常】将调取写入待发短xin!”)
            局_smsOnly = 取数据摘要 (到字节集 (到文本 (局_intimestamp) + “-” + 局_Id))
            局_modelID = “1736738”
            局_sendVar = “[” + #引号 + 局_workName + #引号 + “,” + #引号 + 取文本中间 (时间_时间戳转文本 (到文本 (局_intimestamp), 2), 12, 5) + #引号 + “]”
            局_结果 = 子程序_新增待发短xin (局_smsOnly, 局_sendTel, 局_sendVar, 局_modelID, “2222”, 1001)
            .如果 (局_结果 = 真)
                子程序_输出日志 (“新增待发短xin结果为【真】唯一值【” + 局_smsOnly + “】”)
            .否则
                子程序_输出日志 (“新增待发短xin结果为【假】唯一值【” + 局_smsOnly + “】”)
            .如果结束

        .否则
            子程序_输出日志 (“业务[” + 局_Id + “-” + 局_workName + “]检查状态正常”)
        .如果结束


        延迟 (200)
        到下一行 (局_记录集句柄)
    .计次循环尾 ()

    子程序_输出日志 (“检查自动录单是否在线完毕!”)
    释放记录集 (局_记录集句柄)
.否则
    子程序_输出日志 (“检查自动录单是否在线,数据库打开失败!”)
.如果结束



补充内容 (2023-3-27 20:52):
完整代码已发出
回复

使用道具 举报

结帖率:40% (6/15)
 楼主| 发表于 2023-3-27 20:55:47 | 显示全部楼层   新疆维吾尔自治区乌鲁木齐市
源码已经发出来,大家可以帮忙看看吗?

123.e

965.05 KB, 下载次数: 8

回复

使用道具 举报

结帖率:0% (0/1)

签到天数: 24 天

发表于 2023-12-1 08:07:06 高大上手机用户 | 显示全部楼层   湖南省长沙市
死循环内加,处理事件,程序延时
回复

使用道具 举报

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

本版积分规则 致发广告者

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

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

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