Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #53, АПРЕЛЬ 2005 г.

.NET конкурентам!

Скрыпников Сергей

Спецвыпуск: Хакер, номер #053, стр. 053-076-6


Dim TM As New clsThreadManager

AddHandler TM.Done, AddressOf DoneHandler

Далее для каждого потока создаем рабочего, устанавливаем ему "трудовую норму" :).

Dim Worker As New clsWorker

Worker.Host = txtHost.Text

Worker.FirstPort = (i - 1) * 65536 / ThreadsCount

Worker.LastPort = i * 65536 / ThreadsCount - 1

Подписываемся на событие Log, которое будет информировать хозяина о прогрессе в работе -AddHandler Worker.Log, AddressOf LogHandler. Создаем новый поток, скидываем ссылку на него в менеджер потоков (чтобы знал, за кем присматривать) и запускаем поток.

Dim t As New Thread(AddressOf Worker.Start)

TM.Threads.Add(t)

t.Start()

И в отдельном потоке запускаем менеджер потоков:

Dim TMThread As New Thread(AddressOf TM.JoinThreads)

TMThread.Start()

Также в frmMain определены две процедуры, обработчики событий Log и Done. Их не обязательно комментировать.

Public Sub LogHandler(ByVal Port As Int32, ByVal Opened As Boolean)

SyncLock Me

PortsList(Port) = Opened

PortsScanned += 1

lblProgress1.Text = "Отсканировано " & PortsScanned.ToString & " портов"

lblProgress2.Text = "Сканируется порт " & Port.ToString

End SyncLock

End Sub

Public Sub DoneHandler()

Dim sb As New System.Text.StringBuilder

For i As Int32 = 1 To 65536

If PortsList(i) = True Then

sb.Append("Порт " & i.ToString & " открыт" & ControlChars.CrLf)

End If

Next

txtLog.Text = sb.ToString

MessageBox.Show("Отчет готов!")

End Sub

Теперь вернемся к менеджеру потоков. Всегда менеджерам жилось лучше, чем рабочим :). Вот и наш менеджер только и делает что следит, отработали ли рабочие свою норму, а в конце рабочего дня рапортует боссу, что работа окончена.

Imports System.Threading

Public Class clsThreadManager

Public Threads As New ArrayList

Public Event Done()

Public Sub JoinThreads()

For Each t As Thread In Threads

t.Join()

Next

RaiseEvent Done()

End Sub

End Class

Вот, собственно, и все. Теперь, надеемся, ты имеешь хотя бы небольшое представление о технологии dot.NET. Начинать пользоваться ею или нет – конечно, личное дело программиста. Но мы на нее перешли и теперь нисколько об этом не жалеем (хотя все зависит от поставленных перед программистом задач). Полный текст программы ты сможешь найти на диске (а также тебя там ждет бонус – NET Framework, который теперь не придется качать).

Назад на стр. 053-076-5  Содержание