Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.04;
Скачать: CL | DM;

Вниз

Глюкавый 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.014 c
1-10226
непомнююююю
2003-07-20 02:40
2003.08.04
Drag n Drop формы


4-10494
R4D][
2003-05-30 16:30
2003.08.04
Все тот же Instance


3-10128
Space
2003-07-15 11:27
2003.08.04
Возвращение параметра из хранимой процедуры


14-10440
Skier
2003-07-17 13:01
2003.08.04
Ральф Шумахер в Москве...


3-10120
Vorobyev Sergey
2003-07-14 11:38
2003.08.04
Где в системных таблицах IB информация о текущих подключениях?