![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Глюкавый TIdTelnetServer [D7, Win2k]
alt7 © (2003-05-29 15:15:00)У сервера есть событие 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 - ноль эмоций.
Чего делать-то?
ЗЫ: Это консольное приложение
alt7 (2003-05-29 17:19:00) [1]Понятно, беда в том что программирование под Линукс на Kylix у нас никто не знает ;(( Зашел в тупик....
Reindeer Moss Eater (2003-05-29 17:14:00) [2]Я ничего не знаю о механизмах синхронизации в Линуксе, знаю только что они должны быть и там.
alt7 (2003-05-29 17:12:00) [3]TCriticalSection только для Windows?
А если надо чтоб и в Kylix скомпилировалось?
Reindeer Moss Eater (2003-05-29 17:04:00) [4]Одна глобальная структура + TCriticalSection
alt7 (2003-05-29 17:02:00) [5]Все клиенты получают одни и те же данные
Reindeer Moss Eater (2003-05-29 16:56:00) [6]Знаешь, нет универсальных рецептов вне контекста желаемых результатов.
Откдуа я знаю, что у тебя за логика использования массива?
Должен ли он использоваться всеми подключившимися клиентами, или каждый клиент требует своих данных?
Пока это не определено, нет и ответа на твой вопрос.
Заполнил threadvar переменную в главном потоке - только в главном потоке и прочитаешь эти данные. Нужны данные в OnExecute - заполняй массив в этом же потоке!
alt7 (2003-05-29 16:51:00) [7]Ну дык это понятно. НО мне ж надо передать значения в обработчик. Как?
Reindeer Moss Eater (2003-05-29 16:47:00) [8]Патаму чта компилятор сделал так, что для каждого потока существует свой экземпляр массива. Это следствие использования threadvar.
alt7 (2003-05-29 16:43:00) [9]как я понимаю, мои массивы есть глобальные переменные, объявлены как threadvar. значит они видны только в mainthread. А обработчик OnExecute выполняется в своем отдельном потоке, посему значения элементов этих массивов там неизвестно. Так как же передать значения ети в обработчик OnExecute?
alt7 (2003-05-29 16:34:00) [10]Что-то малость не работает, объявил я те массивы которые в OnExecute threadvar"aми. И пока не заходим в обработчик OnExecute в них есть значения, как-то только вошли, все строки пустые, почему?
Reindeer Moss Eater (2003-05-29 15:37:00) [11]F1
alt7 (2003-05-29 15:34:00) [12]и где? УРЛ?
Reindeer Moss Eater (2003-05-29 15:30:00) [13]Сорри, не туда написал.
ПРочитай про доступ к глобальным переменным из потоков.
Reindeer Moss Eater (2003-05-29 15:29:00) [14]В ТВОЕЙ СЕКЦИИ ОБРАБОТКИ ИСКЛЮЧЕНИЯ ЕСТЬ КОД, КОТОРЫЙ МОЖЕТ ВЫЗВАТЬ ИСКЛЮЧЕНИЕ.
alt7 (2003-05-29 15:28:00) [15]Блин, не говори загадками, говори популярно.. Как будто я знаю что там за секции есть
Reindeer Moss Eater (2003-05-29 15:26:00) [16]Используя механизм критических секций.
alt7 (2003-05-29 15:25:00) [17]а как к нему по-русски (правильно) обращаться?
Reindeer Moss Eater (2003-05-29 15:23:00) [18]Что к массиву твоему (не локальной переменной процедуры) нельзя обращаться из вторичного потока таким образом.
alt7 (2003-05-29 15:19:00) [19]И с чем едят многопоточность? Конкретнее, что хочешь сказать?
Reindeer Moss Eater (2003-05-29 15:18:00) [20]В курсе, что компонент многопоточный?