-
> PonosetcDM (18.06.2010 11:48:37) [37]
Это же потоки, откуда Memo1.Lines.Add без синхронизации.
-
> почиму это коннекшен рвется?
Потому что как только клиент отправит какую-либо строку, ReadLn тут же вернет управление, и после лажи [40] Execute завершит выполнение, что ведет к разрыву соединения по инициативе сервера
-
> Это же потоки, откуда Memo1.Lines.Add без синхронизации.
Окей, давай эту строчку ваще уберём.... и все равно
T = Telnet
S = Server Project
запустил Т
запустил S
T, o localhost 12312
S принял подключение
S отправил "123", T обработал и выдал "123"
T закрыли, Т открыли
T, o localhost 12312
S при посылке грит Connection closed gracefully
теперь ваще все Гут должно быть, никакой проблеммы с синхронизацией...
и все тоже самое...
-
> PonosetcDM © (18.06.10 12:48) [42]
> запускаю телнет опять,
> делаю телнетом "o localhost 12312", и даже коннект у сервера
> не срабатывае
Зачем же давить BitBtn1, если нет ни одного коннекта ?)
-
Хм.... ТОгда вопрос: А почиму его нет))????? Ведь когда телнет дисконектился, у сервера сработал дисконнект, а потом коннект не срабатывает...
-
PonosetcDM © (18.06.10 11:48) [37]
for i:=0 to IdTCPServer1.Contexts.LockList.Count-1 do
чтож ты делаешь то? нехороший человек
-
procedure TForm1.BitBtn1Click(Sender: TObject);
var i:integer;
list:TList;
begin
list:=IdTCPServer1.Contexts.LockList;
try
for i:=0 to list.Count-1 do
with TIdContext(list.Items[i]).Connection.Socket do
WriteLn('123');
finally
IdTCPServer1.Contexts.UnlockList;
end;
end;
-
Сергей М. © (18.06.10 12:44) [41]
+1 к [35]
-
Мдааа......... вот так таааааакккк...... Спс большое вроде бы все работает, теперь буду следить за всем, и закреплю в аналах своей памяти все посты сказанные сдесь...
Только хотелось бы узнать по-подробнее: почиму не работает с for i:=0 to IdTCPServer1.Contexts.LockList.Count-1 do,
а если IdTCPServer1.Contexts.LockList.Count-1 переопределить, то все работает??
СПС всем огромное...
-
сдесь = здесь
-
> в аналах своей памяти
Анальная у тебя память, однако))))
-
PonosetcDM © (18.06.10 14:39) [48]
количество LockList дожно быть равно колву UnlockList
тут
PonosetcDM © (18.06.10 11:48) [37]
procedure TForm1.BitBtn1Click(Sender: TObject);
var i:integer;
begin
try
for i:=0 to IdTCPServer1.Contexts.LockList.Count-1 do
with TIdContext(IdTCPServer1.Contexts.LockList.Items[i]).Connection.Socket do
WriteLn('123');
finally
IdTCPServer1.Contexts.UnlockList;
end;
end;
Колво LockList = 1+ListCount
и это при условии что дельфи за тебя оптимизирует i:=0 to IdTCPServer1.Contexts.LockList.Count-1 за менив постоянное вычисление предела цикла на единичное вычисление
колво UnlockList = 1
-
> Slym (20.06.2010 13:05:51) [51]
А ты можешь документально подтвердить постоянное вычисление предела цикла?
-
> Slym © (20.06.10 13:05) [51]
> количество LockList дожно быть равно колву UnlockList
Это же не семафор)
-
Сергей М. © (20.06.10 22:30) [53]
а критической секции это не касается?
один поток накрутит EnterCriticalSection и пока не скрутит столько же раз Leave - другие будут ждать
Anatoly Podgoretsky © (20.06.10 13:19) [52]
читать отрывочно умеешь, теперь прочитай еще раз полностью: вникни в формулу (1 (вычисление предела)+ListCount (кол-во итераций)) и дочитай про оптимизацию
-
ТЫ локлист открыл и заблокировал,разблокируй его и все пойдет