Форум: "Сети";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизМногопоточность в Indy Найти похожие ветки
← →
Pavel (2010-01-29 10:34) [0]Использую компонент IdHTTPServer1.
С толкнулся с проблемой, что при обработке нескольких потоков выходные данные потока не соответствуют входным.
Вот пример кода:
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
us := ARequestInfo.RawHTTPCommand;
p := Pos("img", us);
if p > 0 then
begin
Memo1.Lines.Add(us);
p1 := Pos("_", us);
Delete(us, 1, p1);
p1 := Pos("_", us);
z := Copy(us, 1, p1 - 1);
Delete(us, 1, p1);
p1 := Pos("_", us);
x := Copy(us, 1, p1 - 1);
Delete(us, 1, p1);
p1 := Pos(".", us);
y := Copy(us, 1, p1 - 1);
Delete(us, 1, p1);
Memo2.Lines.Add(us);
end;
end;
В результате работы процедуры данные, в Memo1 и Memo2 разные.
← →
Медвежонок Пятачок © (2010-01-29 10:59) [1]нельзя работать с вцл из вторичных потоков.
ты работаешь с вцл (мемо) из вторичного потока (TForm1.IdHTTPServer1CommandGet выполняется в контексте вторичного потока)
← →
Pavel (2010-01-29 11:08) [2]А как правильно сделать, чтобы дынные в Memo1 и Memo2, были одинаковыми?
← →
Медвежонок Пятачок © (2010-01-29 11:14) [3]чтобы дынные в Memo1 и Memo2, были одинаковыми?
memo1.lines.text := memo2.lines.text
← →
Медвежонок Пятачок © (2010-01-29 11:17) [4]Memo1.Lines.Add(us);
...
Delete(us, 1, p1);
Memo2.Lines.Add(us);
а с чего они вообще должны быть одинаковыми при таком раскладе?
← →
Pavel (2010-01-29 11:23) [5]Сори, но проблема не много другая. Как Сделать, чтобы занчение переменной us не изменялось в пределах выплнения одного запроса.
Т. е. нужно следующее, поступает HTTP-запрос, получаем значение переменной us, затем выполняем с полученным знкачением некий набор действий, и результат действий должен соответствовать именно тому значению переменнй us, которое прочитали в данном запросе.
← →
Медвежонок Пятачок © (2010-01-29 11:29) [6]значение переменной us у тебя меняется твоим же кодом
четыре раза
Delete(us, 1, p1);
в рамках обработки одного и того же запроса
← →
Медвежонок Пятачок © (2010-01-29 11:31) [7]причем в связи с тем, что переменная глобальная, то ее меняет обработка каждого нового гет запроса.
то есть каждый запрос меняет значение us четыре раза.
← →
Медвежонок Пятачок © (2010-01-29 11:33) [8]даже не четыре, а пять раз с учетом:
us := ARequestInfo.RawHTTPCommand; //раз
Delete(us, 1, p1); //два
...
Delete(us, 1, p1); //три
...
Delete(us, 1, p1); //четыре
...
Delete(us, 1, p1); //пять
...
← →
Pavel (2010-01-29 12:29) [9]Спасибо! Разобрался.
← →
Anatoly Podgoretsky © (2010-01-29 15:01) [10]> Pavel (29.01.2010 11:08:02) [2]
Зачем тогда два мемо
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.075 c