Обнаружил глюк TCP клиента, не могу понять с чем связано, схема элементарная, помогите выявить причину глюка, 3й день не могу решить:
code_30580.txt
Откройте схему, нажмите кнопку 1, затем кнопку 2. в Memo ни чего не появляется.
Если схему запустить заново и нажать сначала 2 а потом 1 , то в Memo отображается инфа.
Сразу объясню почему использую WinExec - он может работать асинхронно, что в случае с ping'ом сервера очень удобно (если проблемы со связью), программа в данном случае не "подвисает" как если использовать компонент ping,да и отдельный поток создавать не надо.
+ сейчас схема тестовая, в дальнейшем действия будут выполняться на основе результата пинга (в учет пойдет кол-во % потерь).
Проверял на 3х разных web серверах, на разных php обработчиках. Везде была аналогичная ситуация. Так же пробовал компилировать схему на 2х разных компах (Win7 32& Win7 64).
Этот топик читают: Гость
Ответов: 655
Рейтинг: 18
|
|||
карма: 0 |
| ||
файлы: 1 | code_30580.txt [1.4KB] [219] |
Ответов: 16884
Рейтинг: 1239
|
|||
Gunnman писал(а): Обнаружил глюк TCP клиента![]() |
|||
карма: 25 |
|
Разработчик
Ответов: 26306
Рейтинг: 2146
|
|||
Gunnman писал(а): Обнаружил глюк TCP клиентаЭто не глюк TCP_Client-a, это попытка его запуска из другого потока. Лечится вот так, самый наипростейший вариант
Вот только почему это работает я без понятия, так что, не спрашивай |
|||
карма: 22 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 3 раз(а), последний 2025-01-10 18:27:03 |
|||
карма: 0 |
|
Разработчик
Ответов: 26306
Рейтинг: 2146
|
|||
host-109-235-189-9.bisv.r писал(а): А как в дальнейшем определять сколько потоков в программе?Через диспетчер задач ------------ Дoбавленo в 11.55: Нашел, что влияет на работу в потоках -- для работы в потоках должен быть создан любой экземпляр сокета, неважно какого, до запуска в потоках, можно даже его не инициализировать, главное, что бы было создано его окно обработчика сообщений. Можно добавить такую заглушку в TCP_Client |
|||
карма: 22 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 3 раз(а), последний 2025-01-10 18:27:03 |
|||
карма: 0 |
|
Разработчик
Ответов: 26306
Рейтинг: 2146
|
|||
Вообще-то, этого делать не стоит только потому, что точка onRead никогда не будет работать в другом потоке, даже если разрешить такое использование, тк эта точка везде привязана только к одному обработчику сокетов, а он находится всегда в отдельном специальном потоке асинхронных сокетов. Откуда возникает вопрос -- какой смысл работы TCP_Client-a в дргих потоках, когда обработка сообщений происходит только в одном
![]() Откуда и происходит нестыковка при попытке создания первого сокета в другом потоке (вот у тебя и работало сначала 2, а потом 1, но не работало наоборот, тк первый созданный сокет был привязан к главному потоку наследованием, а окно обработчика сообщений сокетов создается всегда только одно), что приводит к созданию окна обработчика, привязанного к чужому потоку, который не имеет своего собственного обработчика, привязанного к главному обработчику приложения |
|||
карма: 22 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 3 раз(а), последний 2025-01-10 18:27:04 |
|||
карма: 0 |
|
Разработчик
Ответов: 26306
Рейтинг: 2146
|
|||
95x153x163x62.kubangsm.ru писал(а): если требуется после парсинга результата ( процент потерь) ping выполнять действие?Без потерь и без доп потоков как-то так можно
Маску сам отрегулируешь, и процент, думаю, тоже можно посчитать |
|||
карма: 22 |
| ||
Голосовали: | Gunnman |
Ответов: 655
Рейтинг: 18
|
|||
nesco, Спасибо! Выполнение POST запроса происходит от главного потока я правильно понял?
|
|||
карма: 0 |
|
Разработчик
Ответов: 26306
Рейтинг: 2146
|
|||
Gunnman писал(а): Выполнение POST запроса происходит от главного потока я правильно понял?Да это вообще текстовый билдер, откуда запустили, там и будет работать |
|||
карма: 22 |
|
11