Форум: "Сети";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
ВнизГлюкавый TIdTelnetServer Найти похожие ветки
← →
alt7 (2003-05-29 15:15) [0]У сервера есть событие OnExecute.
Исходник его обработчика:
with AThread.Connection do
begin
if (l_arrS_last[1] <> arrS_last[1]) then begin WriteLn("LAST"+" "+arrS_last[1]); l_arrS_last[1] := arrS_last[1] end;
if (l_arrS_last[2] <> arrS_last[2]) then begin WriteLn("LAST"+" "+arrS_last[2]); l_arrS_last[2] := arrS_last[2] end;
if (l_arrS_last[3] <> arrS_last[3]) then begin WriteLn("LAST"+" "+arrS_last[3]); l_arrS_last[3] := arrS_last[3] end;
if (l_arrS_last[4] <> arrS_last[4]) then begin WriteLn("LAST"+" "+arrS_last[4]); l_arrS_last[4] := arrS_last[4] end;
end;
Смысл: если в строке arrS_last[x] изменилась информация, то ее отправить нужно.
Так вот, минут 10-15 нормально новые порции информации отправляет. Потом нет. Посмотрел, как только входим в обработчик, то l_arrS_last[x] = arrS_last[x]
l_arrS_last[x] нигде больше не меняется.
Пробовал сделать отдельный массив со строками, которые бы хранили предыдующие значения, и сравнивались, когда вышеуказанные равны - голый васер. Пробовал AnsiString - ноль эмоций.
Чего делать-то?
ЗЫ: Это консольное приложение
← →
Reindeer Moss Eater (2003-05-29 15:18) [1]В курсе, что компонент многопоточный?
← →
alt7 (2003-05-29 15:19) [2]И с чем едят многопоточность? Конкретнее, что хочешь сказать?
← →
Reindeer Moss Eater (2003-05-29 15:23) [3]Что к массиву твоему (не локальной переменной процедуры) нельзя обращаться из вторичного потока таким образом.
← →
alt7 (2003-05-29 15:25) [4]а как к нему по-русски (правильно) обращаться?
← →
Reindeer Moss Eater (2003-05-29 15:26) [5]Используя механизм критических секций.
← →
alt7 (2003-05-29 15:28) [6]Блин, не говори загадками, говори популярно.. Как будто я знаю что там за секции есть
← →
Reindeer Moss Eater (2003-05-29 15:29) [7]В ТВОЕЙ СЕКЦИИ ОБРАБОТКИ ИСКЛЮЧЕНИЯ ЕСТЬ КОД, КОТОРЫЙ МОЖЕТ ВЫЗВАТЬ ИСКЛЮЧЕНИЕ.
← →
Reindeer Moss Eater (2003-05-29 15:30) [8]Сорри, не туда написал.
ПРочитай про доступ к глобальным переменным из потоков.
← →
alt7 (2003-05-29 15:34) [9]и где? УРЛ?
← →
Reindeer Moss Eater (2003-05-29 15:37) [10]F1
← →
alt7 (2003-05-29 16:34) [11]Что-то малость не работает, объявил я те массивы которые в OnExecute threadvar"aми. И пока не заходим в обработчик OnExecute в них есть значения, как-то только вошли, все строки пустые, почему?
← →
alt7 (2003-05-29 16:43) [12]как я понимаю, мои массивы есть глобальные переменные, объявлены как threadvar. значит они видны только в mainthread. А обработчик OnExecute выполняется в своем отдельном потоке, посему значения элементов этих массивов там неизвестно. Так как же передать значения ети в обработчик OnExecute?
← →
Reindeer Moss Eater (2003-05-29 16:47) [13]Патаму чта компилятор сделал так, что для каждого потока существует свой экземпляр массива. Это следствие использования threadvar.
← →
alt7 (2003-05-29 16:51) [14]Ну дык это понятно. НО мне ж надо передать значения в обработчик. Как?
← →
Reindeer Moss Eater (2003-05-29 16:56) [15]Знаешь, нет универсальных рецептов вне контекста желаемых результатов.
Откдуа я знаю, что у тебя за логика использования массива?
Должен ли он использоваться всеми подключившимися клиентами, или каждый клиент требует своих данных?
Пока это не определено, нет и ответа на твой вопрос.
Заполнил threadvar переменную в главном потоке - только в главном потоке и прочитаешь эти данные. Нужны данные в OnExecute - заполняй массив в этом же потоке!
← →
alt7 (2003-05-29 17:02) [16]Все клиенты получают одни и те же данные
← →
Reindeer Moss Eater (2003-05-29 17:04) [17]Одна глобальная структура + TCriticalSection
← →
alt7 (2003-05-29 17:12) [18]TCriticalSection только для Windows?
А если надо чтоб и в Kylix скомпилировалось?
← →
Reindeer Moss Eater (2003-05-29 17:14) [19]Я ничего не знаю о механизмах синхронизации в Линуксе, знаю только что они должны быть и там.
← →
alt7 (2003-05-29 17:19) [20]Понятно, беда в том что программирование под Линукс на Kylix у нас никто не знает ;(( Зашел в тупик....
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c