Foxtable(狐表)用户栏目专家坐堂 → [求助](追问)红袍老师的循环暂停,CUP开销大,达到30-55


  共有2121人关注过本帖树形打印复制链接

主题:[求助](追问)红袍老师的循环暂停,CUP开销大,达到30-55

帅哥哟,离线,有人找我吗?
zyqzyy
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:822 积分:5879 威望:0 精华:0 注册:2013/7/29 12:00:00
[求助](追问)红袍老师的循环暂停,CUP开销大,达到30-55  发帖心情 Post By:2015/12/9 9:31:00 [只看该作者]

红袍老师的循环暂停,CUP开销大,占用率达到30%-55%。5分钟后FT报:无法处理的故障,Foxtable 停止运行。有没有更好的法子?原代码如下:

 

Dim Sum As Integer
Dim i As Integer
For i = 1 To 100
     
 Do Until vars("开关") = False

      'Application.DoEvents

 Loop
     Sum = Sum + i
   
Next
MessageBox.Show("循环结束:" & Sum)

[此贴子已经被作者于2015/12/10 16:17:36编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/9 9:33:00 [只看该作者]

 这个是肯定的,没有人会这样写代码。

 

 你要在另一个地方改变变量成 vars("开关") = False 才行啊,不然一直死机啊


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/9 9:36:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
zyqzyy
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:822 积分:5879 威望:0 精华:0 注册:2013/7/29 12:00:00
  发帖心情 Post By:2015/12/10 16:32:00 [只看该作者]

按红袍老师的指点,写了个例子,存在下面的问题:

1、如何结束后台进程。

2、任务完成后CPU利用率反而升高。

例子:

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:多线程.foxdb

代码:

--窗口按钮事件:

Dim drs As List(Of DataRow)

drs = DataTables("TempTable").Select("[Failure] <= 2 and [success] <= 1 ")

If drs.Count > 0

MessageBox.Show(drs.Count)

Else

    Return

End If

 

Vars("Thread_ftp") = New System.Threading.Thread(AddressOf NextFor)

LisTemp = new List(Of Object)

 

For Each dr1 As DataRow In  drs      '

    Dim pName As Object = dr1("FullPath") & "|" & "医疗质量\" & FileSys.GetName( dr1("FullPath"))

    LisTemp.add(pName)

Next

Vars("Thread_ftp").Start()

 

自定义函数

 

Update

 

Do While True

   

    If LisTemp.Count > 0 Then

       

        Dim ns() As String = LisTemp(0).split("|")

        Dim ftp As new FTPClient

        ftp.Host = ""

        ftp.Account = ""

        ftp.Password = ""

        ftp.Port = 21

        If ftp.Connect

            If FileSys.FileExists(ns(0)) = True

                Dim Val As String

                Val = Rand.NextString(12)

                val = FileSys.GetParentPath(ns(0)) & "\temp\" & val

                FileSys.CopyFile(ns(0),val)

                DataTables("TempTable").ReplaceFor("success",2,"FullPath = '" & ns(0) & "'")

                If ftp.Upload(val,ns(1),True) = True

                    DataTables("TempTable").ReplaceFor("success",3,"FullPath = '" & ns(0) & "'")  '3为成功,1为失败,0为等待,2为正在上传

                Else

                    DataTables("TempTable").ReplaceFor("success",1,"FullPath = '" & ns(0) & "'")

                End If

            Else

                DataTables("TempTable").ReplaceFor("success",1,"FullPath = '" & ns(0) & "'")

            End If

        End If

        LisTemp.RemoveAt(0)

       

    End If

Loop

 

全局代码

 

Default

 

Public LisTemp As new List(Of Object)

 

NextFor

 

Public Sub NextFor

Functions.Execute("Update")

End Sub



 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/10 16:41:00 [只看该作者]


 回到顶部