Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];

Вниз

Проблема с указателями   Найти похожие ветки 

 
Rembo   (2008-08-17 20:39) [0]

Делаю вот что:
...
type
 PTrhead=^TIdPeerThread;
 TCL = record
   name:string[255];
   thread:PTrhead;
 end;
...
var
 clients:array[0..10000] of TCL;
 cc:word;
 client:TCl;
...
cc:=0;
...
inc(cc);
client.thread:=@AThread;//AThread типа TIdPeerThread
clients[cc]:=client;
...
function findclient(thr:PTrhead):integer;overload;
var i:integer;
begin        
result:=-1;
for i:=0 to cc-1 do begin
 if clients[i].thread=thr then begin result:=i; exit; end;
end;
end;
...
Если словами то, делаю масив записей строка+указатель, потом кидаю в него одну или несколько записей с указателями на некий AThread, потом пытаюсь искать в этом массиве по указателю и ненахожу ничо(findclient(@AThread) выдает -1)
Подскажите плз где ошибка.


 
Сергей М. ©   (2008-08-17 20:50) [1]

Все объекты в Делфи представлены указателями.
Зачем тебе потребовался указатель на указатель ?


> 0..10000


Куда ты из столько наструячил ?)
Можешь считать, что тебе повезло, если тебе удалось создать всего пару тысяч потоков. А уж создать 10000 тебе никогда не удастся.


 
Rembo   (2008-08-17 20:55) [2]

Ок, вопервых, я потоки не создаю, это делает TIdTcpServer, делаю чат, нехотел говорить чтоб тему не перенсли. Так вот, там на одного клиента 1 поток, и как то надо их идентифицировать, вот я и придумал хранить ник и указатель.

> Зачем тебе потребовался указатель на указатель ?

Значит ли это что AThread уже указатель на поток?


 
Сергей М. ©   (2008-08-17 21:06) [3]


> я потоки не создаю, это делает TIdTcpServer


А зачем тогда тебе этот массив ?
IdTcpServer имеет св-во Threads.
Но в любом случае создание 10000 потоков невозможно.


> и как то надо их идентифицировать


IdPeerThread имеет св-во Data, где можно хранить указатель на данные, предназначенный для идентификации объекта-потока.


> Значит ли это что AThread уже указатель на поток?


Да.


 
DVM ©   (2008-08-17 21:13) [4]


> Rembo   (17.08.08 20:55) [2]

Инди в данном случае выбор не лучший. На одного подключенного клиента будет расходоваться в лучшем случае 1-1.5 мегабайта памяти.


 
Rembo   (2008-08-17 21:31) [5]

Ага кажись понял, массив ненужен.
DVM а почему так много и что лучше для чата юзать?


 
DVM ©   (2008-08-17 21:49) [6]


> DVM а почему так много

Примерно столько надо системе для поддержания работы 1 потока, если не ошибаюсь.


> и что лучше для чата юзать?

MS утверждает, что самое лучшее в таких случаях асинхронные неблокирующие сокеты, например, с уведомлениях на сообщениях.
Так как инди по природе блокирующие сокеты, то может их стоит заменить на библиотеку ICS или самому попробовать сделать сервер средствами WinSock


 
Rembo   (2008-08-18 01:53) [7]

А как насчет TIdUDP???
Оно ж вроде потоки несоздает ваще?


 
Сергей М. ©   (2008-08-18 08:15) [8]


> DVM ©   (17.08.08 21:49) [6]


> если не ошибаюсь


Ошибаешься.
Сколько системе скажут, столько она и выделит под стек потока.
А если не скажут, то по дифолту 1 мб выделит.
TThread как раз не говорит.


> Rembo   (18.08.08 01:53) [7]
>



> Оно ж вроде потоки несоздает ваще?


А тебе они, потоки эти, зачем ?


 
Alucard   (2008-08-19 01:31) [9]

Самый быстрый (и удобный) способ обслуживания большого количества одновременных соединений в windows (и вообще асинхронного ввода-вывода), это completion ports. http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx.
Контексты пользователей, в свою очередь, можно поддерживать в более производительных структурах данных чем массивы указателей, например в хэшмапах.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.045 c
15-1217598681
Dmitry S
2008-08-01 17:51
2008.09.28
Несколько рабочий столов


4-1197104970
Nil
2007-12-08 12:09
2008.09.28
Прозрачность части окна


3-1206532972
Xmen
2008-03-26 15:02
2008.09.28
Хранимая процедура. Перевод строки


2-1218991319
DON
2008-08-17 20:41
2008.09.28
Имитация нажатия клавиши или активности мыши


3-1206518870
DelphiN!
2008-03-26 11:07
2008.09.28
Выборка только 1ой записи, удовлетворяющей условие





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