![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что-то непонятное с onCLientRead [D5, Win2k]
VID © (2002-10-02 20:25:00)Привет!
USES recvpckt;
http://delphibase.endimus.com/?action=viewfunc&topic=nettransfer&id=10335
var RecvList:TStringList;
...
procedure Form1.ServeronClientRead();
VAR S:String;
begin
S:=Socket.ReceiveText;
REPEAT
IF ProcessReceivedPacket(GBuffer, S) then
begin
IF GBuffer.FBuffer "" then RecvLST.Add(GBuffer.FBuffer);
ClearBuffer(GBuffer);
end;
UNTIL S="";
end;
СИТУАЦИЯ: Клиент посылает серверу, к примеру, сто пакетов один за другим.
Итак пришёл первый пакет. Возникло событие onClientRead, была вызывана проц-ра ProcessReceivedPacket.
Пришёл второй пакет. СНОВА возникло событие. И ЭТО ПРИ ТОМ, ЧТО РАБОТА проц-ры ProcessReceivedPacket не была завершена...
Отсюда вопрос: как быть ?
Что надо сделать, для того, что бы не потерять ни один из пришедших пакетов и в тоже время корректно обработать все полученные пакеты.
УЧТИТЕ, что речь идёт о выполнении кода в основном потоке приложения.
А то полная фигня получается... вся логика юнита recvpckt идёт коту под хвост :(
VID (2002-10-03 11:27:00) [1]ВОПРОС ЗАКРЫТ
Polevi (2002-10-03 11:00:00) [2]>СНОВА возникло событие. И ЭТО ПРИ ТОМ, ЧТО РАБОТА проц-ры >ProcessReceivedPacket не была завершена...
ты ввобще понимаешь что такое событие в данном контексте ?
сам же говоришь что поток один - как может вызваться ClientRead если не передано управление на строку откуда этот обработчик вызывается - ведь кодовый поток занят выполнением ProcessReceivedPacket ???
Digitman (2002-10-03 08:31:00) [3]Почему ты считаешь, что пакет м.б. утерян ? И причем здесь осн. или доп.код.потоки ?