Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

Indy10 WriteFile и синхронизация   Найти похожие ветки 

 
BanderLog   (2006-06-01 07:24) [0]

Привет мастерам!
Пытаюсь написать простенькую прогу по передаче фалов по TCP.
Использую TIdTCPServer и TIdTCPClient. Возникла проблема синхронизации с основным потоком (для отображения процесса передачи файла и ведения лога).
При налиции в исходном коде на клиентской стороне функции WriteFile, при попытки синхронизации приложение просто "уходит в себя". Если закоментировать её, то код отрабатывает нормально. Если раскоментировать, то "уходит в себя" при первом попытке синхронизации (...Synchronize( AddToLog)). за долго до того пока дело дойдет до самой WriteFile.
В чем может быть дело?

В том же самом коде если убрать все выводы в лог, оставив WriteFile, код отрабатывает нормально.


 
Сергей М. ©   (2006-06-01 12:15) [1]


> BanderLog   (01.06.06 07:24)


Отладчик на что существует, как думаешь ?


 
BanderLog   (2006-06-01 12:16) [2]

Проблема почти разрешилась. Одновременная работа (в одной программе) сервера и клиента вызывает данный эффект. При запуске двух копий программы и использовании одной в качестве сервера, а другой как клиент, все работает прекрасно. :(
Вот такие пироги.


 
BanderLog   (2006-06-01 12:18) [3]


> Отладчик на что существует, как думаешь ?

А я сказал на каком этапе подвисает. На вызове метода Synchronize.


 
Сергей М. ©   (2006-06-01 12:24) [4]


> данный эффект


"данный эффект" - это просто ошибки в программе.


> я сказал на каком этапе подвисает. На вызове метода Synchronize


Synchronize() - не атомарная операция.
Следует четко представлять, что происходит в ее "потрохах".
На то как раз есть отладчик и исх.текст класса TThread


 
BanderLog   (2006-06-01 12:28) [5]

во время отладки доходит только до Synchronize и подвисает.


 
BanderLog   (2006-06-01 12:33) [6]

к тому же в дааном случае используются его наследки от Indy 10, исходников которых у меня нет нет.


 
umbra ©   (2006-06-01 12:39) [7]


> исходников которых у меня нет

как нет? инди есть, а исходников нет?


 
BanderLog   (2006-06-01 12:52) [8]

Да действительно, нашёл исходники, но как заствить при отладке дебагер заходить и в них?


 
Сергей М. ©   (2006-06-01 13:07) [9]


> BanderLog   (01.06.06 12:52) [8]


Тебе и заходить туда не надо - достаточно поставить брпейкпойнт в начало тела метода AddToLog()


 
BanderLog   (2006-06-01 13:16) [10]

:))))) Увы не доходит он до этой процедуры, зависает где то в недрах Synchronize. Причем Делфи 2005 показывает что запускается и потом закрывается процесс какой-то, но увы приложение висит.


 
Сергей М. ©   (2006-06-01 13:24) [11]


> BanderLog   (01.06.06 13:16) [10]


> не доходит он до этой процедуры


Значит основной поток твоего приложения в это время чем-то занят и не реагирует на Win-сообщения.

Это и есть та самая ошибка.


 
BanderLog   (2006-06-01 13:24) [12]

Ага, осталось узнать чем, и как на это влияет процедура WriteFile.


 
Сергей М. ©   (2006-06-01 13:28) [13]


> осталось узнать чем


Это (за полным отсутствием кода) - к телепатам.


> как на это влияет процедура WriteFile


Никак.



Страницы: 1 вся ветка

Текущий архив: 2006.10.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.047 c
15-1159957324
Layner
2006-10-04 14:22
2006.10.29
Господа москвичи! Подскажите самый крупный IT универсам в столице


2-1160558670
novill
2006-10-11 13:24
2006.10.29
Как из PWideChar получить Ansistring или Shortstring


2-1160995936
ZZZ_ZZZ
2006-10-16 14:52
2006.10.29
Импорт данных из Excel в DBF


15-1160399500
oldman
2006-10-09 17:11
2006.10.29
Как скопировать файлы с длинными русскими именами???


15-1159967209
ПЛОВ
2006-10-04 17:06
2006.10.29
HDD-шка шутит?