Главная страница
    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.007 c
8-10313
reticon
2003-04-14 12:27
2003.08.04
Game SDK


14-10383
Knight
2003-07-16 21:53
2003.08.04
Свободу действий модераторам!!!


3-10084
BAYES
2003-07-10 17:05
2003.08.04
Вычисляемые поля


11-10159
Arhangel
2002-12-01 20:36
2003.08.04
перевести свою старую программу на


4-10525
ych_boriss
2003-06-03 12:37
2003.08.04
мессаги WM_MOUSELEAVE, WM_MOUSEHOVER.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский