Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.009 c
6-10343
ers
2003-05-28 11:09
2003.08.04
Как проверить работоспособность сервера?


14-10388
gn
2003-07-15 13:52
2003.08.04
предлагаю нескалько задачек проверим навыки???


3-10082
AkaSaint
2003-07-11 00:22
2003.08.04
Either BOF or EOF is true...


14-10347
all
2003-07-16 15:09
2003.08.04
работа на уд. компьютере


4-10502
acsoft
2003-06-01 15:37
2003.08.04
Как сделать треугольное окно с углами в точках, например [0,0],[5





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский