![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Indy10 WriteFile и синхронизация
BanderLog © (2006-06-01 07:24:00)Привет мастерам!
Пытаюсь написать простенькую прогу по передаче фалов по TCP.
Использую TIdTCPServer и TIdTCPClient. Возникла проблема синхронизации с основным потоком (для отображения процесса передачи файла и ведения лога).
При налиции в исходном коде на клиентской стороне функции WriteFile, при попытки синхронизации приложение просто "уходит в себя". Если закоментировать её, то код отрабатывает нормально. Если раскоментировать, то "уходит в себя" при первом попытке синхронизации (...Synchronize( AddToLog)). за долго до того пока дело дойдет до самой WriteFile.
В чем может быть дело?
В том же самом коде если убрать все выводы в лог, оставив WriteFile, код отрабатывает нормально.
Сергей М. (2006-06-01 13:28:00) [1]
> осталось узнать чем
Это (за полным отсутствием кода) - к телепатам.
> как на это влияет процедура WriteFile
Никак.
Сергей М. (2006-06-01 13:24:00) [2]
> BanderLog (01.06.06 13:16) [10]
> не доходит он до этой процедуры
Значит основной поток твоего приложения в это время чем-то занят и не реагирует на Win-сообщения.
Это и есть та самая ошибка.
BanderLog (2006-06-01 13:24:00) [3]Ага, осталось узнать чем, и как на это влияет процедура WriteFile.
BanderLog (2006-06-01 13:16:00) [4]:))))) Увы не доходит он до этой процедуры, зависает где то в недрах Synchronize. Причем Делфи 2005 показывает что запускается и потом закрывается процесс какой-то, но увы приложение висит.
Сергей М. (2006-06-01 13:07:00) [5]
> BanderLog (01.06.06 12:52) [8]
Тебе и заходить туда не надо - достаточно поставить брпейкпойнт в начало тела метода AddToLog()
BanderLog (2006-06-01 12:52:00) [6]Да действительно, нашёл исходники, но как заствить при отладке дебагер заходить и в них?
umbra (2006-06-01 12:39:00) [7]
> исходников которых у меня нет
как нет? инди есть, а исходников нет?
BanderLog (2006-06-01 12:33:00) [8]к тому же в дааном случае используются его наследки от Indy 10, исходников которых у меня нет нет.
BanderLog (2006-06-01 12:28:00) [9]во время отладки доходит только до Synchronize и подвисает.
Сергей М. (2006-06-01 12:24:00) [10]
> данный эффект
"данный эффект" - это просто ошибки в программе.
> я сказал на каком этапе подвисает. На вызове метода Synchronize
Synchronize() - не атомарная операция.
Следует четко представлять, что происходит в ее "потрохах".
На то как раз есть отладчик и исх.текст класса TThread
BanderLog (2006-06-01 12:18:00) [11]
> Отладчик на что существует, как думаешь ?
А я сказал на каком этапе подвисает. На вызове метода Synchronize.
BanderLog (2006-06-01 12:16:00) [12]Проблема почти разрешилась. Одновременная работа (в одной программе) сервера и клиента вызывает данный эффект. При запуске двух копий программы и использовании одной в качестве сервера, а другой как клиент, все работает прекрасно. :(
Вот такие пироги.
Сергей М. (2006-06-01 12:15:00) [13]
> BanderLog (01.06.06 07:24)
Отладчик на что существует, как думаешь ?