![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 26.04.2016
Сообщений: 5
|
![]()
Все привет!
Имеется сервер IdTCPServer. При подключении к серверу клиента, клиент добавляется в список Clients: TThreadList; Код:
Код:
Последний раз редактировалось sosyamba; 26.04.2016 в 07:40. |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 23.04.2009
Сообщений: 1,058
|
![]()
IdTCPServer1Execute на каждое подключение САМ создаёт отдельный поток, таймер такого не умеет
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 26.04.2016
Сообщений: 5
|
![]() |
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 23.04.2009
Сообщений: 1,058
|
![]()
может юзать System.Classes.TThread.Synchronize
или critical section delphi
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
|
![]() |
![]() |
![]() |
#5 | |
Регистрация: 26.04.2016
Сообщений: 5
|
![]() Цитата:
Код:
почему то происходит конфликт между потоками и основным потоком программы. между потоками в IdTCPServer конфликта нет, стабильно работают. как только включаю таймер программа зависает через пару минут. |
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
![]()
Не нужно ещё одну КС. В приведённом отрывке кода нет ответа.
Вероятно, LockList из другого потока блокирует главный поток (пусть даже на доли секунды) во время очередного тика таймера, но сразу после этого идёт обращение к форме или её полям (переменным класса и т.п.). Таким образом поток заблокировал форму (т.к. таймер скорее всего на форме), но ждёт доступа к ней чтобы что-то прочитать/записать с неё. Это и приводит к блокировке блокировщика. Писано наугад, т.к. подробных кодов нет. Но если полный код был, то всё равно написал то же самое, т.к. было бы лень )) |
![]() |
![]() |
![]() |
#7 |
Регистрация: 26.04.2016
Сообщений: 5
|
![]()
Разрешено ли так делать в обработчике IdTCPServer1.OnExecute вызвать IdTCPServer1.Contexts.LockList; ?
может из за этого что глючит? |
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
![]()
Делать можно. Может ли глючить? - Глючить может даже от мёда, если его холодной водой запивать. По отдельности можно многое, а вот в тандеме нет.
На лицо двойная блокировка. Между любыми LockList/UnLockList нельзя ничего синхронизировать (или лезть в другие потоки без синхронизации). P.S. Можно безопасно синхронизировать только то, что не имеет общих ресурсов из области КС |
![]() |
![]() |
![]() |
#9 |
Регистрация: 26.04.2016
Сообщений: 5
|
![]()
OnExecute - выполняется НЕ в основном потоке приложения
а OnDisconnect ? в основном или нет? |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
IdTCPServer и IdTCPClient | -=<_Makap_>=- | C++ Builder | 0 | 08.12.2012 18:41 |
idTCPServer | Anatoliy24 | Работа с сетью в Delphi | 7 | 12.02.2011 11:40 |
idTCPserver и кирилица | BARNEY | Работа с сетью в Delphi | 7 | 21.10.2010 14:47 |
IdTCPServer | Pankhammer | Работа с сетью в Delphi | 0 | 30.04.2010 00:14 |
IdTCPServer Exception | Comer_Jus | Работа с сетью в Delphi | 2 | 25.06.2008 22:23 |