Главная страница
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.02 c
2-1218651295
Turbine
2008-08-13 22:14
2008.09.28
не получается обратиться к элементам ListView через указатель


15-1216900159
keymaster
2008-07-24 15:49
2008.09.28
Кто работал с Castalia?


15-1217991071
Slider007
2008-08-06 06:51
2008.09.28
С днем рождения ! 6 августа 2008 среда


2-1219221866
Элек_Троник
2008-08-20 12:44
2008.09.28
Организация хранения результатов запросов через API в памяти


2-1218737060
programmer90
2008-08-14 22:04
2008.09.28
Полноэкранный режим программы