Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Глюкавый 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]

В курсе, что компонент многопоточный?


Наверх

Титульная страница Поиск, карта сайта Написать письмо