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

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

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

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

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

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

Цитата:
Если да то по этой причине и приходится ждать 30 секунд, и во время работы сокета (соединения с несуществующим ип) приходится ждать т.к. поток занят этой работой (ожиданием ответа от железки) и не может выполнять других действий.
Я знаю об этом, и ищу решение этого. У блок. сокета нет потока. А мне нужно реализовать этот поток и им обернуть блок. сокет так, чтобы было так же просто общаться с сервером.
Человек_Борща вне форума Ответить с цитированием
Старый 30.07.2013, 18:23   #12
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
так же просто общаться с сервером.
Что под этим подразумевается? Отсутствие "тормозов" GUI как вы понимаете решается переносом работы с сокетами в отдельный поток. Sleep() вызванный внутри большого количества потоков на сколько мне известно особой нагрузки не вызывает. О тонкостях "паузы" потока мне к сожалению неизвестно.
Lime вне форума Ответить с цитированием
Старый 30.07.2013, 18:32   #13
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Что под этим подразумевается?
Моё приложение подразумевает работу с многоуровневыми древовидными сетями из устройств.
Девайс 1:
- Девайс 1-1
- Девайс 1-2:
- - Девайс 2-1
- - Девайс 2-2
- Девайс 3
- - Девайс 3-1
- - Девайс 3-2
- - - Девайс 2-1
- - - Девайс 2-3
и т.д. и ещё запутанней.

Ну и при раскрытии Node надо создавать подключения.
И пока клиент не в потоке - это затруднительно возможно. программа просто вешается. А учитывая, что идёт постоянный обмен данными - то вообще караул.
Вот я ищу способ, вынести клиент девайса в TThread, чтобы пользовательский GUI хотя бы не тупил.
Человек_Борща вне форума Ответить с цитированием
Старый 30.07.2013, 18:51   #14
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Так вот же оно решение на блюдечке:
Простейший код потока, при запуске(потока) создаётся подключение, перед этим в GUI вешаете анимацию/обозначение загрузки инфо, вроде
Организовываете пару флагов для работы в стиле Terminated.
При успешном подключении (или другой нужной работе) поток синхронизируется с GUI и изменяет дерево (или вообще что угодно в основном потоке программы). Погуглите "TThread Synchronize" примеров куча. Так-же можно по глупости сделать как я, передать нужные параметры новому потоку чтобы синхронизацией с GUI (или чемто другим) занимался уже он, а после самоуничтожался
Изображения
Тип файла: gif icn_loading_animated-vflff1Mjj.gif (433 байт, 83 просмотров)

Последний раз редактировалось Lime; 30.07.2013 в 18:55.
Lime вне форума Ответить с цитированием
Старый 30.07.2013, 19:04   #15
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

покажи что должен сделать TRosApiClient...
var
Cl: TRosApiClient;
begin
Cl:=TRosApiClient.Create;;
try
что тут?
finally
cl.free;
end;

end;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 30.07.2013, 19:10   #16
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Поток надо удерживать, операции двусторонние, т.е. "обозвал и смылся" - не прокатит.

У меня есть класс содержащий этот клиент.
В конструкторе клиент создается, в деструкторе клиент уничтожается.
В какой-то момент пользователь подключает клиент к устройству в интернетах.
Ну и в порядке вещей, происходит обмен данных между клиентом и VCL программы.

Каждый девайс что-то вроде базы данных.

В общем, я растерялся совсем. Как организовать многопоточность здесь.

Цитата:
покажи что должен сделать TRosApiClient...
var
Cl: TRosApiClient;
begin
Cl:=TRosApiClient.Create;;
try
что тут?
finally
cl.free;
end;

end;
cl.Free нельзя, оно происходит по решению пользователя или по выходу из программы.
Между тем и этим как с БД:
Querty API запросы.

Последний раз редактировалось Человек_Борща; 30.07.2013 в 19:12.
Человек_Борща вне форума Ответить с цитированием
Старый 30.07.2013, 20:02   #17
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Создайте для начала рабочий пример с потоками и их взаимодействием с GUI. А там всё само прийдет...

Я бы сделал задания для каждого потока.
GUI-> поток (задание пользователя): поток проверяет наличие задания в цикле while (flag/terminated/etc..).
поток->GUI (задание выполнено): поток синхронизируется с GUI (одноименным методом передавая значение из поля класса куда угодно и проводит необходимые манипуляции).
Lime вне форума Ответить с цитированием
Старый 31.07.2013, 09:01   #18
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

http://delphi.about.com/od/kbthread/...asynccalls.htm
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сохранить компонент в поток и сразу же его загрузить в BLOB поле? artemavd Общие вопросы Delphi 17 17.05.2012 23:52
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24
как вставить текст в delphi в компонент memo dimusiko Помощь студентам 3 31.01.2012 19:23
[Поиск] Компонент локализации строковых ресурсов и сторонних компонент delphi Человек_Борща Компоненты Delphi 3 23.08.2011 10:44
Поток. Не получается создать поток. Выдает ошибки при запуске bigory Общие вопросы по Java, Java SE, Kotlin 3 23.09.2010 00:40