以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  有没有办法动态增加计划任务呢?也就是项目发布后,用户可以根据需要自定义设定计划。  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=164242)

--  作者:cnsjroom
--  发布时间:2021/4/30 22:51:00
--  有没有办法动态增加计划任务呢?也就是项目发布后,用户可以根据需要自定义设定计划。

有没有办法动态增加计划任务呢?也就是项目发布后,用户可以根据需要自定义设定计划。


计划任务的管理:

首先新增一个全局变量 cishu  默认值为 0

根据需要系统预设20个计划任务,命名为“jihua1jihua2jihua3……,jihua20

每个计划运行的时间均以毫秒进行计算。

如:jihua1代码如下:

If vars("cishu") = 0 Then

    Dim Proc As New Process \'定义一个新的Process

    Proc.File = "http://192.168.43.112:8989/jihua.htm" \'指定要打开的网页地址

    Proc.Start()

    vars("cishu")=vars("cishu")+1

End If

 

 

Jihua.htm代码为:

Dim d As Date = Date.now

If d.DayOfWeek = 5 Then

    If d.Hour = 22 Then

        If d.Minute= 26 Then

            MessageBox.Show("程序即将进行备份")

vars("cishu")=0

        End If

    End If

End If


项目有一内部函数表   有网页名  代码  网页类型  三个字段

网页名:jihua  (也是函数名)

代码:

Dim d As Date = Date.now

If d.DayOfWeek = 5 Then

    If d.Hour = 22 Then

        If d.Minute= 26 Then

            MessageBox.Show("程序即将进行备份")

vars("cishu")=0

        End If

    End If

End If

网页类型:htm


--  作者:有点酸
--  发布时间:2021/5/1 8:33:00
--  
实际上只需一个计划就行了,定时循环函数表。

建议函数表增加一个两列:
1、上次执行时间
2、执行间隔


每次循环,比较当前时间和上次执行时间的价格,如果超过执行时间,就开始执行。

--  作者:cnsjroom
--  发布时间:2021/5/1 12:42:00
--  回复:(有点酸)实际上只需一个计划就行了,定时循环...
老师  是这个思路么?
以下操作系摸索写法,感觉后续计划执行代码有点繁琐了,老师有没有比较简洁的写法呢?
(比如直接输入执行间隔即可自动计算到期时间  然后检测系统时间是否等于到期时间,如果等于那就运行指定的计划代码,)
(当前难处在于不知道怎么计算选定的执行间隔转化为秒数,比如每周一,每周三,每季度第一天,每月最后一天等,如果不折算并计算到期时间,那就要回到我如下写法,感觉有点繁琐哈!)

已经在函数表里面新增了一个计划逻辑列  初始时间  执行间隔   到期时间(初始时间+执行间隔)
1、在计划管理中写入:(设定2000运行时)
Functions.Execute("计划")
2、然后在函数表里写入 函数名为“计划”数据行
代码如下:
Dim d As Date = Date.today
Dim t As Date = Date.now
Dim FirstDay As Date = New Date(d.year, d.month,1) \'第一天
Dim LastDay As Date = New Date(d.year, d.month,Date.DaysInMonth(d.year, d.month)) \'最后一天
Dim y As Integer = Date.Today.Year
Dim q As Integer = (Date.Today.Month - 1) \\ 3 + 1 \'计算现在是第几个季度
Dim dt1 As New Date(y, 3 * (q - 1) + 1, 1) \'获取本季度的第一天
Dim dt2 As New Date(y, 3 * q, Date.DaysInMonth(y,3 * q)) \'获取本季度的最后一天
output.Show(dt2)

Dim w As Integer = Date.Today.DayOfWeek \'算出今天是星期几
Dim w1 As Date = Date.Today.AddDays(-w) \'获取本周的第一天
Dim w2 As Date = Date.Today.AddDays(6 - w) \'获取本周的最后一天

For Each dr As DataRow In DataTables("内部函数表").DataRows
    If dr("计划")=True Then
        If dr("周期")="每月第一天" Then
            If Date.today=FirstDay And t.Hour="17"  Then
                MessageBox.Show("1")
            End If
        Else If dr("周期")="每月最后一天"  Then
            If Date.today=LastDay And t.Hour="14"  Then
                MessageBox.Show("33")
            End If
        Else If dr("周期")="本季度" Then
            If Date.today=dt2 And t.Hour="17" Then
                MessageBox.Show("333")
            End If
        Else If dr("周期")="每周一" Then
            If w=1 And t.Hour="17" Then
                MessageBox.Show("周一")
            End If
        Else If dr("周期")="每周二" Then
            If w=2 And t.Hour="17"Then
                MessageBox.Show("周二")
            End If
        Else If dr("周期")="每周三" Then
            If w=3 And t.Hour="14"Then
                MessageBox.Show("周三")
            End If
        Else If dr("周期")="每周四" Then
            If w=4 And t.Hour="17"Then
                MessageBox.Show("周四")
            End If
        Else If dr("周期")="每周五" Then
            If w=5 And t.Hour="17"Then
                MessageBox.Show("周五")
            End If
        Else If dr("周期")="每周六" Then
            If w=6 And t.Hour="17"Then
                MessageBox.Show("周六")
            End If
        Else If dr("周期")="每周日" Then
            If w=0 And t.Hour="14"Then
                MessageBox.Show("周日")
            End If
        End If
    End If
Next

3、可根据需要再另外新建一个计划管理窗体,主要用于计划、周期字段值的更改

上述操作后初步可以实现计划字段是true时候,满足条件时弹出对应的提示内容。


[此贴子已经被作者于2021/5/2 14:45:59编辑过]

--  作者:有点蓝
--  发布时间:2021/5/5 9:22:00
--  
可以再增加一些辅助列,比如逻辑列:是否每月第一天,是否每月最后一天,是否周一,是否周二,...然后根据需要勾选

那么执行的时候,先判断当前日期,如果是每月第一天,那么就查询“是否每月第一天”勾选的行执行,如果是周一,就查询“是否周一”勾选的行执行