Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |
[Win32] Поможите с сокетами 19.07.01 02:22 Число просмотров: 890
Автор: kabanchik Статус: Незарегистрированный пользователь
|
если есть проблема в "неуспевании", то юзай AutoReset Event.
вот тут
> stats=WaitForMultipleObjects(2,lpEvents,FALSE,m_timeout); он поставит Event на Non-Signaled state.
а вообще подобного рода задача решается немного по другому. для этого есть очень полезная штука: WSAEnumNetworkEvents()
почитай об этом. он сделает тебе ресет, и еще вернет статус сокета.
удачи
|
|
<programming>
|
[Win32] Поможите с сокетами 19.07.01 01:58
Автор: Heromantor Статус: Незарегистрированный пользователь
|
Проблема следующая: имеется неблокирующий сокет, который связан с eventом посредством ф-ции WSAEventSelect так вот сама проблема. Когда я принимаю даные с локальной программы(POP3 сервера) то часть из них проглатывается ибо отсылает он нужный блок несколькоми пакетами и соответственно надо как-то это дело принять причем event срабатывает настолько быстро что сбрасывая текущее событие уже приходит новое и получается так что сбрасывается и следующее соответственно блок еще не принят а ф-ция WaitFoeMultipleEvents не срабатывает.
Вот мой кусок кода:
#define RECIEVE(buf,okstr)\
{\
buf[0]=0;\
stats=WaitForMultipleObjects(2,lpEvents,FALSE,m_timeout);\
switch(stats)\
{\
case WAIT_OBJECT_0: goto goto_on_stop;\
case WAIT_OBJECT_0+1 : ResetEvent(lpEvents[1]);\
break;\
default: goto goto_on_error;\
}\
iTmp = recv(s, buf, sizeof(buf), NULL);\
if (iTmp == SOCKET_ERROR)goto goto_on_error;\
buf[iTmp]=0;\
if (strstr(buf,okstr)==NULL)goto goto_on_error;\
}
может кто подскажет че-нить
|
 |
[Win32] Поможите с сокетами 19.07.01 04:58
Автор: ggg Статус: Незарегистрированный пользователь
|
> Вот мой кусок кода: > stats=WaitForMultipleObjects(2,lpEvents,FALSE,m_timeout);\ > switch(stats)\ > {\ > case WAIT_OBJECT_0: goto > case WAIT_OBJECT_0+1 :
для сокетов есть WSAWaitForMultipleEvents
не знаю может она и может быть заменена WaitForMultipleObjects() но я этого нигде в SDK не видел
|
 |
[Win32] Поможите с сокетами 19.07.01 02:22
Автор: kabanchik Статус: Незарегистрированный пользователь
|
если есть проблема в "неуспевании", то юзай AutoReset Event.
вот тут
> stats=WaitForMultipleObjects(2,lpEvents,FALSE,m_timeout); он поставит Event на Non-Signaled state.
а вообще подобного рода задача решается немного по другому. для этого есть очень полезная штука: WSAEnumNetworkEvents()
почитай об этом. он сделает тебе ресет, и еще вернет статус сокета.
удачи
|
 |  |
[Win32] А я аот еще хотел спросить... 19.07.01 11:05
Автор: Heromantor Статус: Незарегистрированный пользователь
|
|
Есть ли отличия WaitForMultipleObject И WSAWaitForMultipleEvents? А то инфы по этому вопросу я нашел очень мало.
|
 |  |  |
[Win32] А я аот еще хотел спросить... 19.07.01 21:31
Автор: ggg Статус: Незарегистрированный пользователь
|
> Есть ли отличия WaitForMultipleObject И > WSAWaitForMultipleEvents? А то инфы по этому вопросу я > нашел очень мало.
а с чего ты решил что они должны быть похожи ?
|
 |  |  |  |
еще как похожи :))) 20.07.01 01:10
Автор: kabanchik Статус: Незарегистрированный пользователь
|
> > Есть ли отличия WaitForMultipleObject И > > WSAWaitForMultipleEvents? А то инфы по этому вопросу я > > нашел очень мало. > > а с чего ты решил что они должны быть похожи ?
я такое уже делал не раз. и даже такое :
WSAEVENT hEvent = WSACreateEvent();
...................
::MsgWaitForMultipleObjects(1, &hEvent : NULL, FALSE, m_nTimeout, QS_ALLEVENTS);
работают как часики :)))
Event - это объект ядра. нет такого, чтобы для App это был один, а под Сокеты другое. это монопенисные вещи !
|
|
|