не работает DataArrival сокета

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

не работает DataArrival сокета

Сообщение Space » 19.02.2007 (Пн) 17:19

У меня не работает прием данных от сервера сокетом клиента, если у клиента в Form2 Load включить MsgBox. Почему?
Вложения
ProblemWinsock.rar
(2.92 Кб) Скачиваний: 61

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Сообщение Space » 19.02.2007 (Пн) 23:15

Что за глюки? Первый раз зашёл в топик, не увидел добавленного приложения. Добавил приложение снова, появилось два. Приложение добавлено, кто не видит, я не виноват!

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 20.02.2007 (Вт) 3:33

DataArrival - это наверное какой-то метод какого-то ActiveX
И пока форма не загружена (msgbox висит модально) даже таймер работать не будет

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 20.02.2007 (Вт) 3:49

' и если уж очень хочется
Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long

Private Sub Form_Load()
MessageBox Me.hwnd, "Load Form2", "Load Form2", 0
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''MsgBox "Load Form2"
End Sub

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Сообщение Space » 22.02.2007 (Чт) 5:06

EUGY писал(а):DataArrival - это наверное какой-то метод какого-то ActiveX
И пока форма не загружена (msgbox висит модально) даже таймер работать не будет

Form2 - это у меня окно авторизации, и оно само модальное, вызывается из Form1 и сокет лежит на Form1 и сокет работает, хотя Form_Load для Form1 не завершён ещё. Разве форма считается не загруженой, если не завершился обработчик Form_Load?

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 22.02.2007 (Чт) 20:03

Эксперимент: поместить на форму UserControl и посмотреть при загрузке формы....

Private Sub UserControl_Initialize()
Debug.Print Ambient.UserMode 'Error: Client Site Not Avaliable
End Sub

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 22.02.2007 (Чт) 20:30

А по поводу уровня модальности, не углубляясь в теорию (здесь есть более продвинутые товарищи), считаю что:

'в этом коде
Private Sub Form_Load() ' Load Form1
Form2.Show 1
End Sub

вторая форма организует свой цикл сообщений в приложении,
и этого НЕ происходит при

Private Sub Form_Load() ' Load Form1
MsgBox "qwerty"
End Sub

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.02.2007 (Чт) 20:40

Чё-то я не улавливаю суть дискуссии.
MsgBox - обычная функция, и пока она не вернётся, будет висеть всё приложение.
Что не так?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 22.02.2007 (Чт) 20:41

Все так, но надо же разжевать...

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 22.02.2007 (Чт) 20:51

MessageBox в отличие от MsgBox позволяет выбрать свою модальность
MB_APPLMODAL и поэтому предпочтительнее в случае описанном выше...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.02.2007 (Чт) 20:57

EUGY, ты о чём? :roll:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение tyomitch » 22.02.2007 (Чт) 20:59

MB_APPLMODAL не в тему. MsgBox тоже вызывает MessageBox(MB_APPLMODAL).

Другое дело, что на время отображения родного MsgBox рантайм VB, действительно, искуственно тормозит свой message loop.
Изображение

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 22.02.2007 (Чт) 21:01

to SERG:
Не поленись, открой пример Space и вместо MsgBox поставь MessageBox.

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 22.02.2007 (Чт) 21:05

to tyomitch:
может ошибся с константами (MB_),
но ведь и я говорю о message loop

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

Сообщение tyomitch » 22.02.2007 (Чт) 21:35

Константы вообще не при чём.
Изображение

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 22.02.2007 (Чт) 21:51

tyomitch писал(а):Константы вообще не при чём.

проверил, все так.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Сообщение Space » 23.02.2007 (Пт) 2:12

вообще-то сокет отказывается работать после того, как MsgBox отработал (даже не во время его вызова).

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 23.02.2007 (Пт) 16:32

Я и хотел донести мысль, что пока какая-нибудь форма не организует цикл сообщений (а это происходит в модальных формах после Form_load) ocx будет считаться не загруженным.

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

Сообщение tyomitch » 23.02.2007 (Пт) 16:44

2Space: вероятнее всего, события во время отображения MsgBox просто съедаются, а не скапливаются в очереди. (Сейчас проверил -- так оно и есть.)

2EUGY: кем он будет считаться незагруженным, и при чём здесь сообщения, интересно?
Изображение

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 23.02.2007 (Пт) 17:27

tyomitch писал(а):2EUGY: кем он будет считаться незагруженным, и при чём здесь сообщения, интересно?

по-видимому, будет считаться незагруженным самим OCX (Client Site Not Avaliable).
А вот кем съедаются события:wink:
P.S. Сами сообщения тут совершенно не причем, но вот объект формы
сначала инициирует Form_load в VB, потом, в рантайм: ~BeginModalState~ и while (GetMessage...).
То есть, до цикла объект формы тоже считается не загруженным.
Последний раз редактировалось EUGY 23.02.2007 (Пт) 17:52, всего редактировалось 2 раз(а).

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

Сообщение tyomitch » 23.02.2007 (Пт) 17:46

EUGY писал(а):
tyomitch писал(а):2EUGY: кем он будет считаться незагруженным, и при чём здесь сообщения, интересно?

по-видимому, будет считаться незагруженным самим OCX (Client Site Not Avaliable).

И при чём здесь сообщения, интересно?
Изображение

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 23.02.2007 (Пт) 17:48

Схоластика на тему "Кем считается незагруженной сама форма"?

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

Сообщение tyomitch » 23.02.2007 (Пт) 17:57

Нет, ты всё-таки не в ту сторону пошёл в своих рассуждениях.
Сообщения съедаются не потому, что кто-то не успевает начать цикл, а потому, что их намеренно съедают во время отображения MsgBox. Если перенести всё дело из Form_Load в Command1_Click, ничего не изменится.
Изображение

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 23.02.2007 (Пт) 18:01

Да уж. факт.
А это где-то документировано?

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Сообщение Space » 23.02.2007 (Пт) 20:49

Тёмыч, я уже молчу во время работы MsgBox. Сокет не работает после того, как MsgBox закрылся (сервером отправляешь данные после отработки MsgBox в клиенте) и сокет клиента не принимает данные и вообще потом сокет ничего не принимает!

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Сообщение Space » 26.02.2007 (Пн) 0:07

Ау, люди!!!!!!! ? А чем MsgBox отличается от вызова модальной формы? Если заменить этот MsgBox вызовом своей модальной фомы типа MsgBox (BorderStyle=vbFixedDialog), сокет работает!

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 26.02.2007 (Пн) 0:36

tyomitch писал(а):Сообщения съедаются не потому, что кто-то не успевает начать цикл, а потому, что их намеренно съедают во время отображения MsgBox.

Вот такое отличие :)


Вернуться в Visual Basic 1–6

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

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

    TopList