Главная страница
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.021 c
2-1218819253
batya-x
2008-08-15 20:54
2008.09.28
Обои на рабочем столе


2-1218824814
inforoom
2008-08-15 22:26
2008.09.28
Создана ли Форма?


15-1217001779
Сергей М.
2008-07-25 20:02
2008.09.28
Это я


1-1198608053
Черный Шаман
2007-12-25 21:40
2008.09.28
Написал универсальную функцию прозрачности окон.


15-1217733481
PZ
2008-08-03 07:18
2008.09.28
День железнодорожника