|
|
|
Вот такой код...., работает только пополам
|
|||
|---|---|---|---|
|
#18+
Хочу показать пример кода, с которым я мучуюсь уже 4 день. Может кто подскажет где искать причину глюков( или еще что хорошее посоветует). И хоть код относится к программированию на контрл. Winsock (что не всем может близко знакомо), но странности в работе/не работе этого куска кода можно рассматривать несколько абстрактно... Смысл проблемы (если отбросить все лишнее) вот в чем. Такой кусок кода не работает: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Смотрим за приходящими данными в событии DataArrival, выводим через Debug.Print. После Connect, приходит ответ об успешном подсоед. - 220 Serv-U FTP Server v3.0 for WinSock ready..., а вот дальше, посылай хоть тысячу разных команд (через разные паузы и т.д.), одно молчание. НО, стоит этот код разделить на две части, разместить на двух кнопках и последовательно их нажать(можно даже очень быстро), как все работает, чудеса: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Не могу понять почему так происходит. Причем после первого (не работ.) варианта, Aссess через некоторое время начинает сильно тормозить и приходится его потом 3 кнопками, вроде WinsockCom.Close всегда в конце делаю, вообще незнаю что и думать, чертовщина какая-то, а во всех справках так красиво написано, посылаешь, примаешь а тут такая петрушка... :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 14:28 |
|
||
|
Вот такой код...., работает только пополам
|
|||
|---|---|---|---|
|
#18+
Предлагаю поставить DoEvents в том месте, где требуется пауза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 14:33 |
|
||
|
Вот такой код...., работает только пополам
|
|||
|---|---|---|---|
|
#18+
Саныч ты не внимателен. посмотри на функцию Wait еще раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 14:38 |
|
||
|
Вот такой код...., работает только пополам
|
|||
|---|---|---|---|
|
#18+
Не могу понять причины не работы кода вместе, но работы его с разделением... А если так попробовать - в первом коде после коннекта программно вызывать код под второй кнопкой - если будет работать, то оформить функцию. Но не понятно, почему так происходит.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 14:43 |
|
||
|
Вот такой код...., работает только пополам
|
|||
|---|---|---|---|
|
#18+
Я невнимателен, прошу прощения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 15:36 |
|
||
|
Вот такой код...., работает только пополам
|
|||
|---|---|---|---|
|
#18+
Не могу понять причины не работы кода вместе, но работы его с разделением... А если так попробовать - в первом коде после коннекта программно вызывать код под второй кнопкой - если будет работать, то оформить функцию. Но не понятно, почему так происходит.... Прикол, так заработало. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Блинн, но в чем же покус фокус. У себя никто не пробовал повесить на кнопку этот код? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 15:43 |
|
||
|
Вот такой код...., работает только пополам
|
|||
|---|---|---|---|
|
#18+
Я не пробовал. Мысль высказал просто из своих жизненных наблюдений за поведением аксеса, иногда, почему-то, связка нескольких функций стабильно отрабатывает, а если в одну поместить - то нет. Мне показалось, что здесь как раз такой же случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 15:47 |
|
||
|
Вот такой код...., работает только пополам
|
|||
|---|---|---|---|
|
#18+
После перебора различных вариантов, я понял, что весь затык происходит после команды .Connect и почему-то даже несмотря на то, что приходит ответ от сервера об успешном подсоединении и статус winsock=7 (готов значит) ему все-таки требуется какая-то пауза, после которой уже можно направлять следующие команды. При этом пауза через DoEvents или Sleep для него не подходит, а вот после обращения к другой функции/процедуре все ОК. Что ж такого происходит в компьютере/Access'е, когда он вызывает другую функцию в отличии от такого же кода, следующего прямиком...? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 16:02 |
|
||
|
Вот такой код...., работает только пополам
|
|||
|---|---|---|---|
|
#18+
2 SergeySV Не знаю что происходит - повторюсь ещё раз. Для окончательной проверки глюка можно проделать тоже самое в обычном VB (не разделяя тело на 2 части), если там всё будет работать - значит проблемма только в Аксесе. Аксес, к примеру, очень плохо работает с ActiveX (плохо не в плане функциональности), а в плане удобства доступа к свойствам объекта из VBA, поэтому приходится иногда писать код в VB, а потом его переносит в Аксес. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 16:12 |
|
||
|
Вот такой код...., работает только пополам
|
|||
|---|---|---|---|
|
#18+
Ок, проверю дома на VB6 (можно еще и на VB.net), завтра напишу, что интересного... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 16:28 |
|
||
|
Вот такой код...., работает только пополам
|
|||
|---|---|---|---|
|
#18+
Докладываю :-) Под VB6 ocx winsock не встал, конфликт имен (с VB.net компонентами наверное) Под VB.net коннект был, но при первом приеме данных происходила какая-то ошибка в методе GetData, пока не понял почему, разбираюсь... Однако дальнейшие эксперименты под Access показали вот что: Чтобы эти куски кода заработали необходимо их разделить, но засовывание одного из них в функцию не проходит, только если один из кусков засунуть в другую Sub и потом ее вызвать, вот такие вот пироги... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 13:28 |
|
||
|
Вот такой код...., работает только пополам
|
|||
|---|---|---|---|
|
#18+
А что так работать не будет? У меня работает (правда в целом посложнее будет, но принцип такой) WinsockCom.Connect Do Until WinsockCom.State = 7 DoEvents Loop sSendData = "USER " & sUser & vbCrLf WinsockCom.SendData sSendData ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 14:10 |
|
||
|
Вот такой код...., работает только пополам
|
|||
|---|---|---|---|
|
#18+
Прикольно, этот код у меня тоже заработал нормально. Ща тестирую, кажется я начал понимать в чем была загвоздка... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 16:46 |
|
||
|
Вот такой код...., работает только пополам
|
|||
|---|---|---|---|
|
#18+
Ага, что-то стало уже ясно. Вернее, на чем конкретно происходит затык: Если в предложенный выше код: Код: plaintext 1. 2. 3. 4. 5. 6. добавить кусок (он у меня сидел в функции WaitToFTP): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. то тут глюки и начинаются. Дело в цикл. вызовах метода WinsockCom.GetData. Если пошагово проходить этот код, то данные успевают прийти, цикл не крутиться и программа работает дальше... Дальше идет теоретическая чать: Я могу конечно ошибаться, но проблему я вижу вот в чем. После Connect данные от FTP (его ответ) должны прийти на winsock (соотв. разместиться где-то в памяти.) Однако пока они идут, мы уже успеваем вызвать метод WinsockCom.GetData, который обращается к этому к этому куску памяти (ии еще кого напрягает по этому поводу), а там пока шишь, метод сидит в цикле поэтому вызвается еще раз и еще раз и...... видимо это так напрягает систему,access,winsock, что она из за этих бесконечн. GetData не может положить пришедшие данные от сервака, даже несмотря на DoEvents, видимо в этом случае DoEvents не помогает контрол получить соб. DataArrival-получение данных, а он продолжает накручивать GetData.... тогда понятно откуда тормоза потом в системе идут и Access подвисает. Это только мое мнение, так что прошу высказываться... Решение: попробую вставить в цикл с GetData небольшую паузу, поглядим ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 18:06 |
|
||
|
Вот такой код...., работает только пополам
|
|||
|---|---|---|---|
|
#18+
Ну, GetData надо делать обязательно после события DataArrival. Либо в самой обработке события, либо в обработке события выставлять флаг, а в другой процедуре его проверять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 18:24 |
|
||
|
Вот такой код...., работает только пополам
|
|||
|---|---|---|---|
|
#18+
Да, про флаг я тоже подумал... посмотрим... сравним.. Для чего я просто все это затеял. Хотелось весь connect засунуть в одну процедуру/функцию, что бы потом можно было использовать достаточно независимо, тем более, что в справке никаких предостережений на счет использования GetData я не видел и в примерах часто видел такое же использование GetData без события DataArrival... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 18:31 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32245189&tid=1679765]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
| others: | 240ms |
| total: | 422ms |

| 0 / 0 |
