Потоки. Асинхронная передача данных. Помогите разобраться.

Рейтинг: 1Ответов: 1Опубликовано: 08.05.2011

Делаю программу отправки/приема данных на сервер, и решил сделать её асинхронной. Читаю много форумов, но пока не совсем понимаю последовательность действий.

Вот смотрите - делаю поток командой CreateEvent(...). Далее я должен создать сокет, или все же "ветку" (thread[0] = CreateThread(...)) в которой уже создавать сокет? И если я захочу сделать второй поток, то мне надо будет создавать вторую ветку thread[1] = CreateThread(...)? Или еще один Event?

Плюс у сокетов есть свой WSACreateEvent, и в инете видел, что создают Event, потом Thread, потом в этом Thread создают WSACreateEvent... Вопрос - для чего?
Сможете объяснить?:)

Ответы

▲ 2Принят

CreateEvent не создает поток. Эта функция создает событие, на которые поток может реагировать и синхронизировать себя с другими потоками. Т.е. это что-то вроде локера для доступа к данным.

Дальше, сокет вы можете создать как в треде, так и вне его. Если вам нужно обращаться к сокету в нескольких потоках, то выносите его за пределы треда. Если только один поток будет работать с ним, то есть смысл спрятать сокет внутрь. Чтобы создать второй поток, нужно снова вызывать CreateThread.

WSACreateEvent - используется для асинхронной работы с сокетами. Т.е. программа может быть как-бы "однопоточная", но при определенных событиях (например на асинхронный сокет приходит месадж), вызывается функция программы, асигнованная с этим евентом.

А вообще, советую больше почитать на тему сокетов, потоков и евентов. В инете полно инфы. Лучше искать ответы не на форумах, а в msdn или каких-то самоучителях и онлайн-руководствах.