以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  关于移动服务器代码变成多线程请教  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=104850)

--  作者:ap9709130
--  发布时间:2017/8/6 23:41:00
--  关于移动服务器代码变成多线程请教
各位老师

我想把服务器代码变成多线程,但因为有参数,不知道怎么弄,请帮忙!我的代码如下:

Dim sb As New StringBuilder
sb.AppendLine("<!doctype html>")
sb.AppendLine("<html>")
sb.appendLine("<head>")
sb.AppendLine("<meta charset=\'gb2312\'>")
sb.AppendLine("<meta name=\'viewport\' c>")
sb.appendLine("</head>")
sb.AppendLine("<body>")
Dim wb As New weui
e.Resp
Dim zd As String = e.path
Dim dw As Integer = zd.IndexOf(".")
zd = zd.SubString(0,dw)
If zd > "" Then
    Dim qd As String = Functions.Execute("checkname",zd)    
    If qd = 1 Then
        Functions.Execute(zd,e)
    Else
        e.WriteString("正在建设中,请期待!")
    End If
End If
sb.AppendLine("</body>")
sb.AppendLine("</html>")

运行暂时没有问题,但我想试试变成多线程会不会更好,但因为有参数,不知道怎么变,请老师指教!多谢!

--  作者:有点甜
--  发布时间:2017/8/7 9:34:00
--  
多线程不是可以传递一个参数的么?你可以把e参数传递过去即可。
--  作者:有点甜
--  发布时间:2017/8/7 9:36:00
--  

比如

 

全局代码

 

Public Sub thread_sub1(ByVal obj As Object)
    functions. Execute("多线程操作", obj)
End Sub

 

内部函数

 

Dim obj = args(0)

Dim cmd As New SQLCommand
Dim Count As Integer
cmd.CommandText = "DELETE FROM {订单} WHERE 产品 = \'PD01\'"
Count= cmd.ExecuteNonQuery()
Messagebox.Show( "总共删除" & Count & "行!")

 

调用代码

 

Dim nthread As New System.Threading.Thread(AddressOf thread_sub1)
nthread.start(参数)


--  作者:ap9709130
--  发布时间:2017/8/7 12:08:00
--  
这种可以的,但是在过程中函数名称是变量,这种要怎么写?
--  作者:ap9709130
--  发布时间:2017/8/7 12:09:00
--  
因为我每一个页面写成一个函数,帮助上也是这么建议的


--  作者:ap9709130
--  发布时间:2017/8/7 12:11:00
--  
functions. Execute(obj)

这样写就可以了,多谢老师。

--  作者:有点甜
--  发布时间:2017/8/7 12:51:00
--  
以下是引用ap9709130在2017/8/7 12:08:00的发言:
这种可以的,但是在过程中函数名称是变量,这种要怎么写?

 

你在httprequest事件启用多线程,然后多线程里面根据e参数调用不同的页面,不行?代码基本一样的。


--  作者:lhpc120
--  发布时间:2017/8/7 13:13:00
--  
收藏~~
--  作者:ap9709130
--  发布时间:2017/8/8 23:11:00
--  
老师,代码如下,但是不行:
Public Sub thread_sub1(ByVal e as RequestEventArgs)
Dim sb As New StringBuilder
sb.AppendLine("<!doctype html>")
sb.AppendLine("<html>")
sb.appendLine("<head>")
sb.AppendLine("<meta charset=\'gb2312\'>")
sb.AppendLine("<meta name=\'viewport\' c>")
sb.appendLine("</head>")
sb.AppendLine("<body>")
Dim wb As New weui
e.Resp
Dim zd As String = e.path
Dim dw As Integer = zd.IndexOf(".")
zd = zd.SubString(0,dw)
If zd > "" Then
    Dim qd As String = Functions.Execute("checkname",zd)    
    If qd = 1 Then
        Functions.Execute(zd,e)
    Else
        e.WriteString("正在建设中,请期待!")
    End If
End If
sb.AppendLine("</body>")
sb.AppendLine("</html>")
End Sub

过程没有问题,可以通过。

但是在httprequest事件启用多线程时代码如下:
Dim nthread As New System.Threading.Thread(AddressOf thread_sub1)
nthread.start(e)

就会出错。多线程代码要怎么写?



--  作者:有点甜
--  发布时间:2017/8/9 9:23:00
--  

改成

 

Public Sub thread_sub1(ByVal e as object)