Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Thread's: сигнализация. 
V
    Опции темы
Piphon
Дата 23.10.2006, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 30.3.2004
Где: Екатеринбург

Репутация: нет
Всего: 2



Как из контекста процессов thread_1, thread_2 и т.п. вызвать событие в контексте процесса thread_event, например для выполнения некого действия. Если можно то пример.

P.S. thread_n выполняет что-то, и о ходе работы сообщает thread_event. Тот в свою очередь пишит в лог.

Это сообщение отредактировал(а) Piphon - 23.10.2006, 19:09
--------------------
Non Progredi Est Regredi...
PM MAIL ICQ   Вверх
Exception
Дата 23.10.2006, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



События из потоков вызываются тем же способом, что и обычные. Поконкретнее проблемку можно?
PM   Вверх
Piphon
Дата 23.10.2006, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 30.3.2004
Где: Екатеринбург

Репутация: нет
Всего: 2



Мне нужен механизм взаимодействия нескольких потоков с одним (без блокировок). т.е:
  • process_n вызывает событие и продолжает свое выполнение.
  • process_event обробатывает это событие.


Это сообщение отредактировал(а) Piphon - 23.10.2006, 23:55
--------------------
Non Progredi Est Regredi...
PM MAIL ICQ   Вверх
Piphon
Дата 24.10.2006, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 30.3.2004
Где: Екатеринбург

Репутация: нет
Всего: 2



Решил... Всего-то надо было поработать со стеком.
--------------------
Non Progredi Est Regredi...
PM MAIL ICQ   Вверх
Exception
Дата 24.10.2006, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



А кодом поделиться?
PM   Вверх
Piphon
Дата 24.10.2006, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 30.3.2004
Где: Екатеринбург

Репутация: нет
Всего: 2



А вот и код.

Module1         - тестовое приложение.
ThreadObject - тестовый поток.
ThreadEvents - поток для обработки событий.

Код

Module Module1


    Sub Main()
        Dim th_log As ThreadEvents(Of String())
        Dim i As Integer
        th_log = New ThreadEvents(Of String())(AddressOf ConsoleWriteInContext)

        For i = 0 To 1
            Dim th As ThreadObject
            th = New ThreadObject(i, th_log)
        Next
    End Sub

    Sub ConsoleWriteInContext(ByVal str As String())
        Dim th_name As String
        th_name = Threading.Thread.CurrentThread.Name
        Console.WriteLine("To {0} from {1}: {2}", th_name, str(0), str(1))
    End Sub

End Module

Class ThreadEvents(Of T)
    Dim thread As New Threading.Thread(AddressOf Listing)
    Dim stack As New Stack(Of T)
    Dim func As ThreadEventRun
    Public Delegate Sub ThreadEventRun(ByVal e As T)

    Sub New(ByVal Func As ThreadEventRun)
        Me.func = Func
        thread.Name = "Event"
        thread.Start()
    End Sub

    Sub AddEvent(ByVal e As T)
        stack.Push(e)
    End Sub

    Private Sub Listing()
        Do
            If stack.Count > 0 Then
                func.Invoke(stack.Pop)
            Else
                Threading.Thread.Sleep(300)
            End If
        Loop
    End Sub
End Class

Class ThreadObject
    Dim th As ThreadEvents(Of String())
    Dim thread As New Threading.Thread(AddressOf Wait)
    Private Shared r As New Random

    Sub New(ByVal Index As Integer, ByVal Th As ThreadEvents(Of String()))
        Me.th = Th
        thread.Name = "Object #" & Index
        thread.IsBackground = True
        thread.Start()
    End Sub

    Sub Wait()
        Dim i, j As Integer

        For i = 0 To 10
            j = r.Next(1000)
            Threading.Thread.Sleep(j)
            th.AddEvent(New String() {Threading.Thread.CurrentThread.Name, j.ToString})
        Next
    End Sub
End Class

--------------------
Non Progredi Est Regredi...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0460 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.