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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
2-1219062308
Сталкер
2008-08-18 16:25
2008.09.28
Выбор из справочника


2-1219139868
pushkin42
2008-08-19 13:57
2008.09.28
Ошибка при выполнении запроса SQL


15-1218192877
axis_of_evil
2008-08-08 14:54
2008.09.28
принимайте дипломированного лопуха


3-1206953949
leonidus
2008-03-31 12:59
2008.09.28
Получение первой записи в таблице


1-1196769878
TIF
2007-12-04 15:04
2008.09.28
DPI и решение проблем, возникающих с ним