Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.08.2014, 23:17   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию Синхронный сокет тормозит программу.

Доброго времени суток!

Есть никий сокет, при запросе на который подвисает все приложение.

Есть ли способ избавиться от этого эффекта?

При том, что запросы могут быть неограниченной вложенности, т.е. если запрос 1 прошел, шлем запрос 2, и так до неопределенной длинны цепочки.

Идею потока я тут запихать не могу....
Человек_Борща вне форума Ответить с цитированием
Старый 08.08.2014, 08:04   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Идею потока я тут запихать не могу....
А почему? И почему выбор синхронного сокета?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.08.2014, 10:20   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Цитата:
А почему? И почему выбор синхронного сокета?
не знаю, как на событийной модели построить работу приложения.

Тут у меня все на функциях построено...
Если ЧтоТоОтправили то.. дейстаие 1 и отправка2 и так много-много раз.

Пока придумал на основе CallBack-ов.

т.е. есть функция SendRequst создает локально поток(внутри функции), функция получает указатель на callBack-метод для получения ответа от сокета. Это показалось мне самой правильной идеей...

Поток саморазрушается по получению ответа.

Цитата:
И почему выбор синхронного сокета?
Так получилось... сторонняя библиотека.
Человек_Борща вне форума Ответить с цитированием
Старый 08.08.2014, 12:13   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
функция SendRequst создает локально поток
Так стопэ! Если у тебя доппотоки то как приложение может тормозиться то?
Или я не так понял?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.08.2014, 12:16   #5
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Цитата:
Идею потока я тут запихать не могу....
Отчего же?
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 08.08.2014, 12:23   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Цитата:
Так стопэ! Если у тебя доппотоки то как приложение может тормозиться то?
Или я не так понял?
Это я такое решение сгенерировал пока что. Может есть иные варианты?
Человек_Борща вне форума Ответить с цитированием
Старый 08.08.2014, 12:52   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Это я такое решение сгенерировал пока что.
Не ну решение с каллбэками это имхо правильно.
Попробуй тестовую функу так запилить и посмотришь оно аль гоуно
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.08.2014, 13:01   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Цитата:
Попробуй тестовую функу так запилить и посмотришь оно аль гоуно
Так ПО получится без тормазов вообще. Когда придет ответ - неизвестно, функции вернуть резульат? Куда там. Все в доп. потоке.


Что если исходить из того, что пользовтель будет работать только с 1 оборудованием одновременно, и сделать по принципу SVN:
получение рабочей копии с устройства, во время этого бюзер не может работать с программой.
Юзер вносит изменения.
Юзер делает commit изменений рабочей копии, назад на устройство, ПО блокируется на этот момент.

Т.е. выкидывыем идею доп. потока, работа в реальном времени исключается.

На сколько это решение будет более верным?

Последний раз редактировалось Человек_Борща; 08.08.2014 в 13:03.
Человек_Борща вне форума Ответить с цитированием
Старый 08.08.2014, 13:22   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
функции вернуть резульат? Куда там. Все в доп. потоке.
Так у тебя же каллбэк сработает
Сама функа установки калбэка ниче не должна возвращать.
Цитата:
выкидывыем идею доп. потока, работа в реальном времени исключается.
Ну не знаю... А если устройство не ответит? как то же таймаут обрабатывать надо, а у тебя поток висит...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.08.2014, 13:25   #10
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Цитата:
выкидывыем идею доп. потока
т.е. Во время получения данных/коммита UI фризится, приложение не реагирует на действия юзера, винда (если это она) верещит, что приложение не отвечает, это желаемый результат?

Как вариант: StartRequest -> два callback'a: для получения результата и для получения ошибки, если что-то пошло не так. На время выполнения запроса висит окошко "Идет загрузка", и бегают синие таблетки)
Благодарить в репутацию. Проклинать — туда же

Последний раз редактировалось Luuzuk; 08.08.2014 в 13:27.
Luuzuk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синхронный вывод в textBox BrookBond C# (си шарп) 6 21.11.2013 14:48
TCPListener синхронный (прием и отправка данных) Johnlion C# (си шарп) 1 20.01.2013 17:43
Сокет останавливает другой сокет. batand C/C++ Сетевое программирование 2 09.10.2012 11:58
Вопрос по WinSock: "сокет=сокет." Ksardas13 C/C++ Сетевое программирование 2 27.11.2011 16:12
Синхронный просмотр SeaMan БД в Delphi 3 09.10.2008 03:16