Re[6]: HTTP Winsock
От: my_problem  
Дата: 25.11.11 12:47
Оценка:
Здравствуйте, okman, Вы писали:

O>Здравствуйте, my_problem, Вы писали:


O>Вот эта строчка для чего ?

O>
O>WaitForSingleObject(0, 50000);
O>


_>>Если я правильно понимаю, я делаю их не блокируемыми и в цикле проверяю, в каком из них на данный момент времени есть данные (клиент или сервер), и читая с этого сокета — отправляю в "противоположный".


O>Цикл — это тоже не хорошо (ну что за собеседник, скажете, — и это ему не хорошо, и то)...

O>Представьте себе 50 потоков, в каждом из которых крутится цикл, причем только для того,
O>чтобы проверить — пришли ли данные. Суть асинхронных операций в Windows в том, чтобы
O>отдать данные и забыть о них на время. Например, поспать [часок] в wait-функции или заняться
O>другой полезной работой. Когда инфраструктура завершит операцию, она даст сигнал и
O>результаты можно будет забрать. Для Windows это наиболее эффективная схема.
O>Есть такая книга — "Программирование в сетях Windows" от Э.Джонса и Д.Оланда.
O>В ней довольно подробно рассматриваются основные модели работы с сокетами — select,
O>перекрытый ввод-вывод, порты завершения, и другие. Рекомендую найти и прочесть.


Спасибо Большое, разобрался, книжку скачал, просмотрел, прочел (не всю пока). С WSASend/WSARecv не подружился, сделал через select + FD_ISSET переводом сокетов в неблокируемый режим. Код пока ужасный, показывать стыдно, но работает безотказно (как ни странно, тьфу три раза). Продолжаю тесты гонять + переделываю остальные части программы, ибо слишком сильно изменился код.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.