Доброе время суток, у меня небольшой вопрос, незнаю или в тему, но я пишу прогу на Дельфи: У меня есть, например, 5 потоков и главное окно. Мне нужна зделать следущие: Конектиться клиент, главное окно выберает куда кинуть етого клиента(тоесть в какой поток), потом етот поток должен заботиться о сокете клиента, тоесть определять - пришли даные или закрылось сойденения. Всё почти зделал, первою часть я зделал с помощу WSAAsyncSelect - так как у меня есть главное окно, но у потоков нету окон - поетому нарыл в иНете такие функции как WSACreateEvent, WSAEventSelect, WSAWaitForMultipleEvents и другие - я узнал что последняя функция (WSAWaitForMultipleEvents) может обробатывать тока 64 сойденений - мне нужна больше. Поетому незнаю как мне зделать вторую часть задачи: поток должен обробатывать события в потоках(fd_read, fd_close). МОЖЕТ КТОТО ЗНАЕТ КАК ВСЁ ЕТО ЗДЕЛАТЬ? ЗАРАНИЕ БЛАГОДАРЕН
А зачем ты так делаешь? Имхо, проще сделать accept и ждать входящее соединение. Когда оно поступит, создай тред и передай ему в качестве параметра хендл сокета. Или такое тебе не подходит?
Если делать за твоим вариантом, то тогда нада создавать поток каждому клиенту, чтобы зделать "асинхронный" режим работы, иначе просто приложения зависнет до поступлении даных или ожыдания конекта. Но мне етот вариант неподходит, мне именно нужно чтобы были уже потоки и главное окно выберало куда кидать клиента и потом уже сам поток обрабатывал всё действия в сокете
Да, надо. http://sysoev.ru/prog/links.html Первые две ссылки. Советую ещё почтать Стивенса, Разработка сетевых приложений.
nester7 Спасибо большое, немного понял, а есть похожое только на русском? а то с англ неочень и ищо мне нужна для Винды, а не для unix-оподобных. Зарание благодарен
Ищо один небольшой вопрос, скока приблизительно максимально можна создать потоков, на Системе: Windows и количество памяти: 4ГБ ???
1. На русском есть. Ищи или сходи в книжный. 2. Тебе хввтит, чтобы обработать много тысяч соединений Конечно же, при "правильной" архитектуре. вот тут, кстати, кажется есть http://all-ebooks.com/
Я зделал маленькую программку которая считает количество возможных потоков, оказалось около 2000, но поискав в иНете я нашел статтью где говориться что уменшыв стек - увеличиваеться уоличество создания потоков, попробывал - работает, но тепер интересный вопрос - Как узнать скока стека нужно программе? (по стандарту стоит 1 МБ, я поставил в тест-программе 64 КБ и смог создать 30 312 потоков =) )
CodeTao тоесть стек нужен тока на 32 КБ ? (приблизительно) Project -> Options -> Linker там увидеш раздел об стеке
Смотря скока тебе надо, я выходил из простой ариметике 1024/64=16 раз; 2000 потоков умножить на 16 будет 32000(~30320) , следственно разделив размер стека на 2 увеличим количество потоков дважды Тока вроде бы размер стека указываются через парамерты CreateTread.
nester7 Интересно как такое зделать, или там железо офигенное, или они всё делают как то по другому, просто когда я создал ети 30312 потоков - ушло очень много оперативки. Может знаеш как держать 200 000 соединений ?
CodeTao Тогда легко можна розчитать скока нужна стека поставить чтобы создать стока потоков, сойдинений - но нельзя очень сильно урезать стек, так как в ньом много что может храниться, поетому хочу узнать - как можна вычесли - на скока можна урезать стек?
Этот параметр для только для стека основного потока. Хотя если при вызове функции CreateThread размер стека указать как 0, то значение берется как раз из поля PE-файла.