Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Многопоточность функции


Автор: VP11 18.2.2013, 14:27
Доброго дня!

Я новенький на форуме и ищу помощи при программировании многопоточности.
Создание отдельного потока и выполнение расчета в нем не проблема для меня. Проблема появляется при запуске нескольких потоков одновременно для той же процедуры со своими параметрами.

Т.е. надо посчитать в н-потоках определенную процедуру и получить результат меняя параметры:
Поток   Парам1 Парам2 ....ПарамХ
1              0.1       75     ....
2              1       75     ....
3              4       75     ....
4              0.1       25     ....
5              1       25     ....
6              4       25     ....
...

Вызывая процедуру, сначала для данной процедуры назначаю параметрам их значения.
Но ее могу понять как при создании 2 потока изменить параметры, чтобы первый поток считал для своих раннее заданных параметров. Для меня проще было бы запуск процедуры с заданием ей параметров Call Schitaj (A, B),  но многопоточность исключает такую возможность.

Просьба простым языком или примером как возможно это сделать.

За раннее благодарен за ответ.

Автор: diadiavova 18.2.2013, 21:18
Ну вот как-то так видимо
Код

Imports System.Threading
Module Module1

    Sub Main()
        For i = 1 To 5
            Dim th As New Thread(AddressOf ParametrizedMethod)
            th.Start(New With {.a = i * 1, .b = i * 2, .c = i * 3})
        Next
        Console.ReadKey()
    End Sub

    Sub ParametrizedMethod(parameters As Object)
        With parameters
            Console.WriteLine("{0} + {1} * {2} = {3}", .a, .b, .c, .a + .b * .c)
        End With

    End Sub
End Module


Автор: VP11 22.2.2013, 10:00
Цитата(diadiavova @ 18.2.2013,  21:18)
Ну вот как-то так видимо
Код

Imports System.Threading
Module Module1

    Sub Main()
        For i = 1 To 5
            Dim th As New Thread(AddressOf ParametrizedMethod)
            th.Start(New With {.a = i * 1, .b = i * 2, .c = i * 3})
        Next
        Console.ReadKey()
    End Sub

    Sub ParametrizedMethod(parameters As Object)
        With parameters
            Console.WriteLine("{0} + {1} * {2} = {3}", .a, .b, .c, .a + .b * .c)
        End With

    End Sub
End Module


Большое спасибо все работает прекрасно. 
Теперь мучаюсь с кодом расчета.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)