Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Димариус
Зарегистрирован: 07.08.2004 Сообщения: 4
|
Добавлено: Пт Дек 17 2004 09:37 Заголовок сообщения: WinSock32 |
|
|
Я в одном потоке слушаю сразу несколько сокетов. Для этого я на каждый сокет создаю EventHandler (WSACreateEvent, WSAEventSelect). Слушаю события я WSAWaitForMultipleEvents. Проблема в том, что я не могу нормально сбросить событие, если в сокете не осталось ничего непрочитанного.
Можно делать так:
Код: | WSAEnumNetworkEvents(client->S->S, hEvents[nEvent], &res);
if (!res.lNetworkEvents)
WSAResetEvent(hEvents[nEvent]);
|
Но если в сокет приходит инфа между первой и второй строчками (проявляется во время отладки), то я сбрасываю событие и не узнаю о инфе. В нормальной работе такая ситуация маловероятна, но возможна.
Как сбросить сокетовое событие граммотно? |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
FUKS
Зарегистрирован: 14.04.2002 Сообщения: 148 Откуда: Москва
|
Добавлено: Пт Дек 17 2004 14:11 Заголовок сообщения: Re: WinSock32 |
|
|
Я бы не извращался с грамотными наворотами, а сделал руками: завёл бы по треду на каждый сокет и обходился без всяких евентов и ресетов. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Димариус
Зарегистрирован: 07.08.2004 Сообщения: 4
|
Добавлено: Вс Дек 19 2004 10:06 Заголовок сообщения: |
|
|
Не хочу плодить потоки. Один управлять проще. Не нужна синхроизация. К тому же с этим потоком общаются другие. Им удобно, что он один. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
|