Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Совместная потоковая модель






В открывшемся диалоговом окне Project Properties (см. ниже) обратите внимание на рамку Threading Model вкладки General. Работа с потоковыми моделями — одна из новых возможностей Visual Basic 6. Точнее, эта возможность была выпущена для Visual Basic 5 в составе дополнения (service pack), но в версии 6 она является встроенной. Некоторые компоненты ActiveX могут быть многопоточными — это означает, что они «хорошо ведут себя» с другими объектами и не мешают работе друг друга.

В Visual Basic разделение потоков между объектами основано на совместной потоковой модели (apartment-model threading). При таком подходе каждый поток имеет свою собственную копию глобальных данных, необходимых для работы объекта. При создании нового потока создается новая копия данных, а внесенные в нее изменения не влияют на глобальные данные других потоков. Упрощенно говоря, в результате приложения Visual Basic могут поддерживать ограниченную многозадачность.

Если вам захочется больше узнать о проблемах многопоточности, обращайтесь к справочной системе Visual Basic.

13. Создайте еще одну надпись рядом с полем txtName. Задайте ее свойству Name значение lbl Тх, а свойству Caption - значение Введите сообщение:. Свойство Enabled должно быть равно False. 14. Создайте текстовое поле под lblТх. Задайте его свойству Name значение txtTx, удалите текущее содержимое свойства Text. Кроме того, задайте свойству Enabled значение False.

15. Создайте еще одно текстовое поле, расположенное на пару линий сетки ниже txtTx, и задайте его свойству Name значение txtRx. Задайте свойству Enabled значение False и удалите текущее содержимое свойства Text.

16. Задайте свойству Multiline элемента txtRx значение True, а свойству ScrollBars -значение 2 - Vertical.

После создания всех элементов документ будет выглядеть так, как показано на рис. 18.8.

Рис. 18.8. Клиент WebComm в режиме конструирования 17. Сохраните проект.

Вероятно, вы уже поняли, что визуальное конструирование составляет лишь незначительную часть процесса разработки приложений Visual Basic. К счастью, программный код в данном случае не так уж сложен. Он добавляется в приложение следующим образом:

1. Дважды щелкните на документе в окне конструктора, чтобы открыть окно программы.

2. Вставьте следующий фрагмент в процедуру события Resize документа:

Private Sub UserDocument_Resize()

Растянуть текстовое поле With txtRx

.Move 0,.Top, ScaleWidth, (ScaleHeight -.Top) End Sub

3. Вставьте следующий код в процедуру события Terminate: у

Private Sub UserDocument_Terminate() Закрыть соединение

wsk.Close End Sub

Чтобы другие собеседники знали, кто участвует в разговоре, пользователь должен ввести свое имя. Мы обеспечиваем выполнение этого требования, устанавливая соединение с сервером лишь после ввода данных в поле Name. После ввода имени и нажатия клавиши Enter документ подключается к серверу.

4. Вставьте следующий фрагмент в процедуру события KeyPress поля txtName:

Private Sub txtName_KeyPress(KeyAscii As Integer)

Переслать данные, когда пользователь нажимает Enter If (KeyAscii = 13) And _

(txtName.Text < > " ") Then Подключиться к серверу With wsk

.Protocol = sckTCPProtocol.RemoteHost = " 10.0.0.1".RemotePort = 12345.Connect End With

Сделать доступным к текстовым полям lblТх. Enabled = True txtTx. Enabled = True txtRx.Enabled = True

Запретить возможное изменение имени IblName.Enabled = False txtName.Enabled = False End If End Sub

Обратите внимание: текстовое поле передачи (txtTx) и окна разговора (txtRx) остаются заблокированными до тех пор, пока в поле Name не появится какой-нибудь текст.

ПРИМЕЧАНИЕ Перед тем как запускать приложение, необходимо заменить свойство RemoteHost именем хоста или IP-адресом компьютера, на котором работает сервер WebComm. В нашем примере свойство RemoteHost равно 10.0.0.1, что соответствует первому свободному адресу в тестовом пуле TCP/IP.

В большинстве чат-комнат перед текстом сообщения указывается имя участника. Это позволяет другим собеседникам следить за тем, от кого пришло то или иное сообщение. Конечно, наша чат-комната должна следовать этому неписаному правилу. Проблема решается просто: мы берем имя, введенное в поле Name, приписываем к нему текст сообщения и отсылаем полученную строку.

5. Вставьте следующий фрагмент в процедуру события txtTx_KeyPress:

Private Sub txtTx_KeyPress(KeyAscii As Integer) Dim msg As String

Переслать данные, когда пользователь нажимает Enter If (KeyAscii = 13) And _

(wsk.State = sckConnected) Then

Включить в сообщение имя отправителя msg = " [" & _

UCase$(Trim$(txtName.Text))& _ " ] - " & txtTx.Text

Отправить сообщение wsk.SendData msg

Очистить поле с отправленным текстом txtTx.Text = " End If End Sub

Кроме того, нам понадобится функция, которая будет обрабатывать поступающие сообщения и отображать их в окне разговора.

6. Вставьте следующий фрагмент в процедуру события wsk_DataArrival:

Private Sub wsk_DataArrival(ByVal bytesTotal As Long) Dim msg As String

Получить сообщение из буфера wsk.GetData msg,, bytesTotal

Вывести сообщение в текстовом поле With txtRx

.Text = msg & _

vbCrLf & _ vbCrLf & _.Text End With End Sub

7. Сохраните проект!

Как видите, клиент устроен намного проще, чем сервер, хотя оба приложения во многом похожи. Каждое из них должно создать свою сторону сеанса и обрабатывать поступающие данные. Полученные данные обрабатываются в процедуре события DataArrival методом GetData, а отправляются — методом SendData. Впрочем, оставим теорию! Наверняка вам не терпится посмотреть, как работает наша чат-комната!


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.013 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал