Реализация многопоточности

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Лохматый
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 19.06.2005 (Вс) 16:36
Откуда: Краснодар

Реализация многопоточности

Сообщение Лохматый » 07.11.2005 (Пн) 11:21

Подскажите как в этом примере реализовать многопоточность...(VB 2005)
Есть класс (cls) и основная форма (frmmain).

Код: Выделить всё

public class frmmain

dim i as integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        For i = 1 To 100
            Dim h As New cls
            h.ping(i)
        Next
     
End Sub

end class


Код: Выделить всё

public class cls

Public Sub ping(ByVal i As Integer)
dim result as string

' тут идёт трудоёмкий код выполняется 3 секунды

frmmain.listbox1.items.add(result)' на listbox1 формы frmmain добавляется результат
    End Sub

end class


В данном случае 100 раз по 3 секунды и того времени получается очень много... Как ускорить даный процесс многопоточностью? Или ещё как?
Спасибо!
Последний раз редактировалось Лохматый 07.11.2005 (Пн) 12:36, всего редактировалось 1 раз.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.11.2005 (Пн) 11:59

(на однопроцессорных системах) многопоточность не ускорят процесс.
Единственное, что она делает - что все вычисления тормозят не по очереди, а одновременно (и сильнее).
Изображение

Лохматый
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 19.06.2005 (Вс) 16:36
Откуда: Краснодар

Сообщение Лохматый » 07.11.2005 (Пн) 12:26

tyomitch писал(а):(на однопроцессорных системах) многопоточность не ускорят процесс.
Единственное, что она делает - что все вычисления тормозят не по очереди, а одновременно (и сильнее).

на самом деле там нет ни каких вычислений. Просто приложение ожидает событие а после его происхождения возврашает значение в форму. Это ожидание 3 сек.
Если сделать как я - то за счёт того что 100 экземпляров выполняют одну задачу с разным параметром i одновременно, то на выполнение всего задания требуется 55 сек.
Неужели ни как не ускорить процесс?

Лохматый
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 19.06.2005 (Вс) 16:36
Откуда: Краснодар

Сообщение Лохматый » 07.11.2005 (Пн) 12:31

видимо зря упрошал задачу, класс выглядит так:
Код: Выделить всё

Imports System.Net.NetworkInformation
Imports System.Net

Public Class cls
    Dim ii As Integer
    Dim WithEvents pingClient As New Ping()
   
    Private Sub pingClient_PingCompleted(ByVal sender As Object, ByVal e As System.Net.NetworkInformation.PingCompletedEventArgs) Handles pingClient.PingCompleted
        Dim hname As String
        If e.Error Is Nothing Then
            If e.Reply.Status = IPStatus.Success Then
                Frmmain.ListBox1.Items.Add("192.168.5." & ii.ToString )
exit sub                       
End If
            If e.Reply.Status = IPStatus.TimedOut Then
Frmmain.ListBox1.Items.Add("192.168.5." & ii.ToString  & " - Not responsing")
                Exit Sub
            End If
        End If
    End Sub
    Public Sub ping(ByVal i As Integer)
          ii = i
        pingClient.SendAsync("192.168.5." & ii.ToString, Nothing)
    End Sub
   
End Class


От начала пинга до событие pingClient_PingCompleted проходит около 3 секунд если компьютер не отвечает...


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList