Dilma, в той схеме, что ты хотел в примеры скопировать после doSend лучше всё-таки не делать doClose (хаб удали и восстанови связь). Тогда вроде работает без ошибок, и если StrList исправлен, то и память не кушает. И свободное место лучше на диске С искать (а не на Е, как в схеме).
doClose сразу удаляет мультик, а лучше бы он делал это отложенно, через очередь событий. Проблема зарыта в TCP.pas, метод Close, если он вызывается извне, хорошо бы отложить посылкой соответствующего сообщения WM_USER+1. Т.е. моё предложение - переименовать Close и скрыть этот метод, и сделать другой Close, посылающий сообщение.
------------ Дoбавленo:
Только вот, правильность lparam там никак не проверяется, и если сокет уже был закрыт, второе закрытие (если было послано два сообщения о закрытии) чревато exception-ом. Особенно в том случае, если сам объект уже был (как в нашем случае) удалён.
------------ Дoбавленo:
Отсюда вытекает ещё одна проблема - если сокет был удалён, а в очереди сообщений ещё есть пришедшие данные, то та же фигня.
Этот топик читают: Гость
Ответов: 2125
Рейтинг: 159
|
|||
карма: 1 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
tsdima, по хорошему от окна в TCP модуле лучше избавиться совсем и делать тоже самое через отдельный поток с организацией очереди сообщений скажем через pipe(или mail slot).
|
|||
карма: 27 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 8 раз(а), последний 2025-01-08 05:54:04 |
|||
карма: 0 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Dilma писал(а): от окна в TCP модуле лучше избавиться Нет, окно делает одну очень важную вещь - синхронизацию с основной Thread. Таким образом, все callback-и вызываются в контексте основной нити. Это самый простой путь. ------------ Дoбавленo: Я только одного не пойму: зачем было городить огород из персональных Thread на каждый сокет, когда можно было просто использовать WSAAsyncSelect ![]() |
|||
карма: 1 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 8 раз(а), последний 2025-01-08 05:54:04 |
|||
карма: 0 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Гость писал(а): но я так и непонял что конкретно нужно сделать для того чтоб изображения грузилисьнужно выдать то, что я написал выше. tsdima писал(а): Нет, окно делает одну очень важную вещь - синхронизацию с основной Threadтогда уж через WSAEventSelect. Синхронизация это конечно хорошо, но накладывать из-за этого требование наличия очереди сообщений в проекте как-то не очень правильно. |
|||
карма: 27 |
|
Ответов: 563
Рейтинг: 54
|
|||
Dilma, то есть сначало отправить клиенту то что ты написал, а потом слать страницы?
|
|||
карма: 0 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
что это значит? Если есть запрос на картинку - отправляем картинку. Есть на html - отправляем страницу html. По-моему тут имеется некоторое непонимание работы сервера http и клиента, обращающегося к нему за файлами...
|
|||
карма: 27 |
|
Ответов: 5446
Рейтинг: 323
|
|||
Dilma, а ты что, только что это понял?
Ещё раз (миллион первый на этом форуме): чтобы понять, как сделать HTTP-сервер, надо понять, как он работает. Для этого надо прочитать и понять спецификацию протокола - RFC 2068. Пока этого не сделано - дальнейший разговор бесполезен. |
|||
карма: 1 |
|
Ответов: 563
Рейтинг: 54
|
|||
всё понял
------------ Дoбавленo: дайте заодно bass.dll ![]() |
|||
карма: 0 |
|
Ответов: 5446
Рейтинг: 323
|
|||
карма: 1 |
|
Ответов: 563
Рейтинг: 54
|
|||
спасибо
------------ Дoбавленo: и за одно чтоб не создавай новый топик хотел спросить как сделать что то вроде voice (переговорника). хотелось бы замутить что то вроде радио как в WinAmp'e или JetAudio. ------------ Дoбавленo: Dilma, я знаю ты умный!!! помоги плиз.... |
|||
карма: 0 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Dilma писал(а): требование наличия очереди сообщений Да, из-за этого у нас и в сервисах сокеты не работают. ![]() |
|||
карма: 1 |
|
Ответов: 563
Рейтинг: 54
|
|||
как преобразовать картинку в бинарные данные?
|
|||
карма: 0 |
|
Ответов: 9906
Рейтинг: 351
|
|||
tsdima писал(а): Да, из-за этого у нас и в сервисах сокеты не работаютКстати, не вижу серьезных аргументов, чтобы не присвоить аплету окошко (PControl естественно) c парентом=-3 OnlyForMessages - вроде так называется, не помню точно... |
|||
карма: 9 |
|