首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

求教VB.NET的并发访问有关问题

2013-09-05 
求教VB.NET的并发访问问题当前的场景是这样的:程序Monitor.exe(VB.NET 2010开发),程序启动时,从一个ini文

求教VB.NET的并发访问问题
当前的场景是这样的:
程序Monitor.exe(VB.NET 2010开发),程序启动时,从一个ini文件读取几个不定的IP地址,例如
[DUT1]
server_name=A1
ip=192.168.0.1

[DUT2]
server_name=A2
ip=192.168.0.2

[DUT3]
server_name=A3
ip=192.168.0.3

程序后台启动3个线程,每个线程telnet到每个ip的设备上,读取一些数据反馈回来存储到数据库中。

问题是这样的,如何使用循环创建这数量不定的线程(DUT的数量取决于ini文件配置),每个线程如何绑定telnet到不同的DUT上。

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim ini.dut_number As Integer = readini() '从ini可以获取数量
        For j = 1 To ini.dut_number
            Dim t1 As System.Threading.Thread = New system.Threading.Thread(AddressOf aaa)
            t1.Start()

        Next j
    End Sub
    Private Sub aaa()
        XXX()

    End Sub

还有一种思路是动态创建多个Timer,每个Timer的处理函数是telnet到不同的设备上,如何实现不同的Timer,使用不同的Timer处理函数,这些都是动态的。 VB.NET 线程?动态 线程 动态
[解决办法]
http://bbs.csdn.net/topics/320073764

vb.net也是一样的。可以封装为一个Class,然后你的aaa应该是这个类的对象实例上的方法,而不是当前Form1中的方法。

或者vb.net也支持匿名委托,类似于

        For i As Integer = 1 To 100
            Dim j As Integer = i
            Dim x As Threading.Thread = New Threading.Thread(Sub()
                                                                 Console.WriteLine(j)


                                                             End Sub)
            x.Start()
        Next


这里就是使用一个简洁的匿名委托方法,来使用委托之外的变量i。那么你的每一个Thread执行时就可以调用同一个方法,而给这个方法的参数传入不同的参数j值。
[解决办法]
把创建的线程放数组里,后面就好管理了
[解决办法]
建议采用:哈希表(hash table)和backgroundwork
[解决办法]
引用:
1楼的方法,其实也可以通过thread.start(参数)来调用
5楼的线程数组是个方法

还有个问题是这样的,写了个socket的receive函数,只要缓冲区有报文,就启动更新程序去刷chart图表。希望是telnet到三个不同的设备,每秒读一次当前设备的温度,在chart中汇出三个温度曲线。使用for循环定义了三个tcpclient,这三个tcpclient都会使用这个socket接收函数,现在发现是只是最后一个tcpclient在绘图,缓冲区也是最后一个tcpclient的报文。请教下如果是定义了三个tcpclient,对于receive不是应该是区别缓冲区的吗?
如果使用5楼提出的线程数组,每个成员新建一个tcpclient,是否有问题?

用线程数组,每个成员新建一个tcpclient,肯定没有问题,
不过每个成员也应有自己的接收缓冲区。
否则当然是最后的接收数据覆盖了其他线程的接收数据。





热点排行