![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: 2 Всего: 31 |
у меня тупой нубский вопрос про потоки в Indy плз не бейте больно.
вот решил проверить, что делает инеец, если к нему приходит второй запрос, пока не выполнился первый... и наблюдал не совсем понятную картину:
вот ![]() так вот от сюда видно, что есть нечто под названием AContext, которое содержет нечто вроде потока, созданного самим INDY еще при подключении... в результате этого у нас достаточно времени чтобы спокойно запустить 2 и более клиентов и послать серверу что-нибудь для активации записи данных в файл. файлы пишутся одновременно, что говорит о том, что многопотоковость работает, но так же наблюдаются некоторые странности, к примеру, не отслеживается отключение клиентов, нет реакции при повторном присылании от того же клиента очередного сообщения итп, что говорит о том, что либо я не совсем понимаю многопоточность, либо индейцы кривовато многопоточат... кто-нибудь может внести ясность в отношении 10 индейцев ![]() Это сообщение отредактировал(а) CompWorm - 26.4.2008, 22:15 |
|||
|
||||
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: 2 Всего: 31 |
ну, раз никто не отвечает, давайте разобьем вопрос на несколько простых...
правда ли что TIdTCPServer работает в отдельном потоке и создает для каждого подключившегося клиента по еще одному потоку внутри себя (вне главного VCL потока, но внутри своего) ? ![]() Это сообщение отредактировал(а) CompWorm - 27.4.2008, 17:52 |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
скорее первое. -------------------- There are always someone smarter than you... |
|||
|
||||
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: 2 Всего: 31 |
не стану спорить, но если у кого-то тут все в порядке с многопоточностью, можите пояснить принцип работы плз?
и за одно как получается так, что сообщения не встают в очередь, и главное окно сервера не виснет даже во время длительной работы с файлом? |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
самая большая ошибка в приведенном тобой коде - небезопасная работа с разделяемыми данными...
-------------------- There are always someone smarter than you... |
|||
|
||||
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: 2 Всего: 31 |
MetalFan,
наверно мой код не очень правильный и это мешает мне понять суть происходящего. давайте тогда начнем с исправлений. однако, я не очень большой спец в том, что делаю. поэтому, задавая вопросы, я пытаюсь повысить общий уровень своей эрудированности в данном вопросе. но, ваши комментарии по поводу моей "ошибки в 17 строке" не позволяют мне сделать каких-либо качественных изменений в моем коде. не могли бы вы пояснить более детально, что в моем коде не так. |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
прочитай здесь на форуме статейку про многопоточность.
а более детально я тебе уже сказал - у тебя одновременная работа из нескольких потоков с одними и теми же данными -------------------- There are always someone smarter than you... |
|||
|
||||
CompWorm |
|
||||||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: 2 Всего: 31 |
она у меня уже в двух экземплярах распечатана)) прочел с удовольствием 2 раза, но видно не помогло ![]()
какими? файл один и тот же? так я специально рандомлю чтоб не совпадало
есть вероятность, но пока ни разу не случилось повторов ![]() Это сообщение отредактировал(а) CompWorm - 28.4.2008, 14:17 |
||||||
|
|||||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
а это у тебя что?! где заполняется? -------------------- There are always someone smarter than you... |
|||
|
||||
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: 2 Всего: 31 |
я представил кусок кода, ответственный за обработку приходящих сообщений (у меня вопрос про них). могу, если требуется выложить весь код.
MetalFan, а этот, я возможно плохо прокомментировал:
то есть, я мел в виду, что он заполняется при подключении новых клиентов в событии коннекта, чтобы был список присоединившихся клиентов. соответственно, участок кода, который ты указал, не может быть выполнен минуя момент подключения, где список Clients и пополняется очередной записью Это сообщение отредактировал(а) CompWorm - 28.4.2008, 15:52 |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
т.е. ты считаешь, что "событие коннекта" не может произойти "одновременно" с выполнением данного кода? имо, заблуждаешься -------------------- There are always someone smarter than you... |
|||
|
||||
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: 2 Всего: 31 |
![]()
|
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 3 Всего: 158 |
![]() не надо грозные смайлики вывешивать, лучше сконцентрируйся: пока ты в одном потоке крутишь этот цикл, может произойти подключение/отключение клиента, и твой список клиентов изменится. при этом цикл(когда выполнение к нему вернется) будет работать с несуществующими либо неполными данными. |
|||
|
||||
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: 2 Всего: 31 |
ха! а при отсоединении клиента происходит ожидание завершения потока, в котором выполняется уже неверный цикл... отличная заметка! надо будет придумать защиту... к примеру, на каждый проход цикла поставить какую-нибудь проверку я тут решил в мануалах индейцев порыться для просветления. если вернуться к истокам темы, то я задавал, да простят меня админы, два вопроса: - как устроена система потоков (статья) - где находится и как выглядит очередь сообщений одного клиента (статья) если я правильно понимаю то, что тут написано, - потоков всегда на один больше, чем клиентов. в частном случае, когда сервер только активировался, создаётся один поток для прослушивания. - все сообщения клиента стоят в очереди не основного потока, а записываются и регулируются планировщиком property Scheduler: TIdScheduler. поэтому основной поток не виснет при получении новых сообщений, пока не выполнилось первое. Я ПРАВИЛЬНО ВСЁ ПОНЯЛ? ? ПС соответственно, моя схема выше неправильная. Это сообщение отредактировал(а) CompWorm - 29.4.2008, 14:09 |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
смотри сам. я тебе показал потокоНЕбезопасное место. считаешь, что все должно работать - аминь -------------------- There are always someone smarter than you... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |